`

groovy笔记:XML,JSON,集合操作,正则,闭包

 
阅读更多

看groovy的时候找资料的时候归纳的

代码测试过都可以执行:

 

groovy笔记:

 

XML操作: MarkupBuilder:

def s=new StringWriter()
def builder = new groovy.xml.MarkupBuilder(s)
builder.'web-app' {
    'display-name' 'My Web Application'
}
println s.toString()

 

在里面也可以嵌套写 或者写for等表达式

 

创建:

 groovy.xml.StreamingMarkupBuilder

(http://groovy.codehaus.org/Creating+XML+using+Groovy%27s+StreamingMarkupBuilder)

 

 groovy.xml.MarkupBuilder

 

 

解析可以使用XMLParser:

class XmlExample {
  static def PERSON = 
    """
    <person id='2'>
      <name>Gweneth</name>
      <age>1</age>
    </person>
    """
} //?XML作为Groovy源码

class Person {def id; def name; def age} //Groovy中的Person定义

def xmlPerson = new XmlParser().
                    parseText(XmlExample.PERSON) //?读取XML

Person p = new Person(id: xmlPerson.@id,
                    name: xmlPerson.name.text(),
                     age: xmlPerson.age.text()) //?填入GroovyBean Person中

println "${p.id}, ${p.name}, ${p.age}"

 

 

 

 

生成Json:

和XML的MarkupBuilder传入SW不同 他的输出靠builder本身就可以了

def builder = new groovy.json.JsonBuilder()
       def root = builder.people {
           person {
               firstName 'Guillame'
               lastName 'Laforge'
               // Named arguments are valid values for objects too
               address(
                       city: 'Paris',
                       country: 'France',
                       zip: 12345,
               )
               married true
               // a list of values
               conferences 'JavaOne', 'Gr8conf'
           }
       }
println builder.toString()
println builder.toPrettyString()
def s=new StringWriter()
builder.writeTo(s)
println s.toString()

 

 

或者直接传入一个结构:

import groovy.json.JsonBuilder

def tasks = [1, 2, 3]

def data = [  //data是map
  success: true,
  count: tasks.size(),
  data: tasks.collect {[id: it]}
]

def json = new JsonBuilder(data)
println json.toPrettyString()

 

 

解析直接使用:JsonSlurper

import groovy.json.JsonBuilder
import groovy.json.JsonSlurper
def builder = new groovy.json.JsonBuilder()
       def root = builder.people {
           person {
               firstName 'Guillame'
               lastName 'Laforge'
               // Named arguments are valid values for objects too
               address(
                       city: 'Paris',
                       country: 'France',
                       zip: 12345,
               )
               married true
               // a list of values
               conferences 'JavaOne', 'Gr8conf'
           }
       }
def result = new JsonSlurper().parseText(builder.toString())
println result.people.person.firstName

 

 

 

 

 

 

集合操作:

集合支持 +(两个集合) -(两个集合) * 的操作

each:遍历集合,对其中的每一项应用函数字面值 //相当于erlang的 lists:foreach操作

collect:收集在集合中每一项上应用函数字面值的返回结果(相当于其他语言map/reduce中的map函数)//相当于erlang的lists:map操作

inject:用函数字面值处理集合并构建返回值(相当于其他语言里map/reduce中的reduce函数)

//相当于erlang中lists:foldl操作

findAll:找到集合中所有与函数字面值匹配的元素 //相当于erlang lists:filter操作

max:返回集合中的最大值

min:返回集合中的最小值

 

erlang中:

1> A=[1,2,3,4,5,6].
[1,2,3,4,5,6]
2> lists:map(fun(E) -> E*2 end,A).
[2,4,6,8,10,12]
3> lists:foldl(fun(E,Sum) -> Sum+E end,0,A).
21
5> lists:filter(fun(E) -> E rem 2==0 end,A).
[2,4,6]
6> lists:foreach(fun(E) -> io:format("~p~n",[E*2]) end,A).
1
2
3
4
5
6
ok

 

 

对应的groovy中:

a=[1,2,3,4,5,6]

println a.collect {i -> i*2}

println a.inject(0, {sum, value -> sum + value })

println a.findAll {i -> i%2==0}

a.each {i -> println(i*2)}

 

 

 

 

 

正则表达式

用 def pattern = ~ "正则表达式" //注意 = ~是分开的!!!

然后要match用 def match=("验证的字符串" =~ pattern)就可以了

练习案例:

def begin=System.currentTimeMillis()
def stream=new URL("http://fc.5sing.com/10933160.html###").openStream();
def out=new ByteArrayOutputStream();
def data=new byte[1024];
while((length=stream.read(data))!=-1){
 out.write(data,0,length)
}
data=out.toString("utf-8")
def p = ~"songID: SongID, songType: \"fc\", file: \"(.*)\", singerID: UserID"
def matcher=(data =~ p)
for(m in matcher){
 result=m.get(1)
}
def end=System.currentTimeMillis()
println "time elasped:${end-begin}ms"
result

 

 

 

此外:

字符串可以直接 进行-操作

"1231"-"1" //等于"231" 这点erlang也是一样的 用--符号

 

 

 

 

 

关于闭包:

//转换
interface One{
 def drink();
} 
def one={ -> println "hello"} as One
one.drink()

//默认是Callable类型的
def closure = {
       "called"
}
assert closure instanceof java.util.concurrent.Callable
assert closure() == "called"

//将当前的方法变成一个函数
def modify(item){
 "modify_${item}"
}
def fun=this.&modify
def list=[1,2,3,4,5]
list.collect(fun)
fun(45)

//对于静态方法
def s=Math.&sqrt
s(4) 

//对于实例方法:
class Mine{
  public String sayHello(){
    return "hello";
  }
}
def m=new Mine()
def hello=m.&sayHello
hello()

 

2
0
分享到:
评论

相关推荐

    Groovy和Xquery脚本JSON和XML解析工具

    脚本解析工具,可使用Groovy或Xquery解析JSON报文或XML报文

    Groovy 动态修改XML

    在Groovy中,XML被视为一种对象,可以通过内置的XMLSlurper和XMLParser库来解析和操作。XMLSlurper是用于快速、非验证性解析XML的工具,而XMLParser则提供了更细粒度的控制,适合需要严格解析的场景。 这篇名为...

    Flutter 出现Could not download groovy-all.jar (org.codehaus.groovy:groovy-all:2.4.15)

    在一次代码拉取中,出现了以下问题:Could not download groovy-all.jar (org.codehaus.groovy:groovy-all:2.4.15) 详细的报错信息如下: // 报错信息如下 Could not resolve all files for configuration ':jcore-...

    深入探索Groovy脚本:文件操作的艺术

    本文将深入探讨如何使用Groovy脚本进行文件操作,包括文件的创建、读取、写入、删除等基本操作,以及更高级的操作,如文件过滤和搜索。通过实际的代码示例,我们将展示Groovy在文件操作中的优雅和力量。 Groovy提供...

    groovy-3.0.9-API文档-中文版.zip

    Maven坐标:org.codehaus.groovy:groovy:3.0.9; 标签:groovy、codehaus、jar包、java、中文文档; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码...

    json-lib应用所有jar

    5. **XML与JSON互转**:JSON-lib还提供了XML和JSON之间的转换功能,这对于那些需要在XML和JSON间切换的应用非常有用。 综上所述,JSON-lib作为一个强大的Java JSON处理库,极大地简化了JSON在Java开发中的使用。...

    Groovy学习笔记

    ### Groovy学习笔记知识点梳理 #### 一、Groovy简介 - **概念**:Groovy是一种灵活的脚本语言,其设计初衷是为了更好地服务于Java开发者。它具备许多现代动态语言的特点,比如Python和Ruby,同时又能够无缝地与Java...

    Groovy jar包

    Groovy 脚本化Bean jar包下载

    [Groovy入门]第四讲.数据搜索功能与正则表达式

    Groovy完全支持Java的正则表达式,并且提供了简洁的语法来操作它们。 #### 2.1 正则表达式基础 - `\d`:匹配任何数字。 - `\D`:匹配任何非数字字符。 - `\w`:匹配任何字母、数字或下划线。 - `\W`:匹配任何非...

    读书笔记:Groovy程序设计.zip

    读书笔记:Groovy程序设计

    groovy正则表达式基础1

    通过了解这些基础知识,你可以更有效地在Groovy代码中运用正则表达式,进行字符串的查找、替换和验证等操作。对于自动化构建工具Gradle的配置,理解正则表达式可以帮助你更好地处理构建脚本中的文本处理需求。

    读书笔记:Groovy 程序设计学习.zip

    读书笔记:Groovy 程序设计学习

    Groovy脚本:Java平台自动化测试的灵活选择

    Groovy是一种基于JVM的动态编程语言,它不仅继承了Java的强大功能,还引入了动态类型、闭包、DSL等现代编程特性,使得编写自动化测试脚本变得更加简洁和高效。本文将详细介绍Groovy脚本在自动化测试中的应用,包括其...

    Groovy学习笔记 PDF版

    6. **内建的集合支持**:Groovy提供了丰富的集合操作,如map、filter、each等,使得处理数组和列表变得更加简单。 7. ** Grape**:Grape是Groovy的依赖管理工具,类似Maven或Gradle,它能够自动下载并管理程序运行...

    Groovy脚本:Java平台的动态编程利器

    Groovy是一种运行在Java平台上的动态脚本语言,它与Java紧密集成,提供了一种简洁、灵活的方式来编写Java代码。Groovy不仅支持静态类型检查,还可以在运行时动态地编译和执行代码,这使得它在Java平台中的应用场景...

    groovy-io:与JSON格式之间完美的Groovy序列化。 此外,还支持JSON的精美打印(与jsonEditorOnline样式匹配)

    groovy-io消除了使用ObjectInputStream / ObjectOutputStream序列化对象的需要,而使用了JSON格式。 有第三个可选类( JsonObject ),请参见下面的“非类型化用法”。 groovy-io不需要类实现Serializable或...

    groovy-all-2.4.5-API文档-中英对照版.zip

    Maven坐标:org.codehaus.groovy:groovy-all:2.4.5; 标签:codehaus、groovy、all、中英对照文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译...

    groovy-3.0.7.msi

    groovy

Global site tag (gtag.js) - Google Analytics