看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()
相关推荐
脚本解析工具,可使用Groovy或Xquery解析JSON报文或XML报文
在Groovy中,XML被视为一种对象,可以通过内置的XMLSlurper和XMLParser库来解析和操作。XMLSlurper是用于快速、非验证性解析XML的工具,而XMLParser则提供了更细粒度的控制,适合需要严格解析的场景。 这篇名为...
在一次代码拉取中,出现了以下问题: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提供...
Maven坐标:org.codehaus.groovy:groovy:3.0.9; 标签:groovy、codehaus、jar包、java、中文文档; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码...
5. **XML与JSON互转**:JSON-lib还提供了XML和JSON之间的转换功能,这对于那些需要在XML和JSON间切换的应用非常有用。 综上所述,JSON-lib作为一个强大的Java JSON处理库,极大地简化了JSON在Java开发中的使用。...
### Groovy学习笔记知识点梳理 #### 一、Groovy简介 - **概念**:Groovy是一种灵活的脚本语言,其设计初衷是为了更好地服务于Java开发者。它具备许多现代动态语言的特点,比如Python和Ruby,同时又能够无缝地与Java...
Groovy 脚本化Bean jar包下载
Groovy完全支持Java的正则表达式,并且提供了简洁的语法来操作它们。 #### 2.1 正则表达式基础 - `\d`:匹配任何数字。 - `\D`:匹配任何非数字字符。 - `\w`:匹配任何字母、数字或下划线。 - `\W`:匹配任何非...
读书笔记:Groovy程序设计
通过了解这些基础知识,你可以更有效地在Groovy代码中运用正则表达式,进行字符串的查找、替换和验证等操作。对于自动化构建工具Gradle的配置,理解正则表达式可以帮助你更好地处理构建脚本中的文本处理需求。
读书笔记:Groovy 程序设计学习
Groovy是一种基于JVM的动态编程语言,它不仅继承了Java的强大功能,还引入了动态类型、闭包、DSL等现代编程特性,使得编写自动化测试脚本变得更加简洁和高效。本文将详细介绍Groovy脚本在自动化测试中的应用,包括其...
6. **内建的集合支持**:Groovy提供了丰富的集合操作,如map、filter、each等,使得处理数组和列表变得更加简单。 7. ** Grape**:Grape是Groovy的依赖管理工具,类似Maven或Gradle,它能够自动下载并管理程序运行...
Groovy是一种运行在Java平台上的动态脚本语言,它与Java紧密集成,提供了一种简洁、灵活的方式来编写Java代码。Groovy不仅支持静态类型检查,还可以在运行时动态地编译和执行代码,这使得它在Java平台中的应用场景...
groovy-io消除了使用ObjectInputStream / ObjectOutputStream序列化对象的需要,而使用了JSON格式。 有第三个可选类( JsonObject ),请参见下面的“非类型化用法”。 groovy-io不需要类实现Serializable或...
Maven坐标:org.codehaus.groovy:groovy-all:2.4.5; 标签:codehaus、groovy、all、中英对照文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译...
在Android开发中,XML(可扩展标记语言)和JSON(JavaScript Object Notation)都是常见的数据交换格式。XML因其结构化特性适用于复杂的文档存储,而JSON则以其轻量级、易于阅读和编写的特点广泛用于Web服务的数据...