首先申明下,本文为笔者学习《Groovy 程序设计》的笔记,并加入笔者自己的理解和归纳总结。
1. Groovy字符串创建
使用单引号和双引号都可以创建字符串。
def printClassInfo(str) {
println str
println str.getClass().name
}
printClassInfo "Hello World!"
printClassInfo 'Hello World!'
这两种字符串常量都使用了String
来存储数据。返回
Hello World!
java.lang.String
Hello World!
java.lang.String
如果有变量,单引号还是字符串常量,而双引号会使用GStringImpl
来代替String
,对变量进行求值。
val = 5
printClassInfo "val = $val"
printClassInfo 'val = $val'
返回
val = 5
org.codehaus.groovy.runtime.GStringImpl
val = $val
java.lang.String
如果有特殊字符,例如$
需要在字符串中输出,使用转义字符(\
)。也可以使用正斜杠(//
)来创建。
printClassInfo "val = \$$val"
printClassInfo (/val = $$val/)
返回
val = $5
org.codehaus.groovy.runtime.GStringImpl
val = $5
org.codehaus.groovy.runtime.GStringImpl
多行字符串,使用三个单引号或双引号定义多行字符串常量。
multi_line_str = '''Hello world!
Welcome to BeiJing!
Nice to meet you!'''
println multi_line_str
返回
Hello world!
Welcome to BeiJing!
Nice to meet you!
2. 字符串加载
字符串常量中,对变量进行修改。
week = "Friday"
text = "Today is $week"
println text
week = "Saturday"
println text
虽然week
的值发生了改变,但同时该变量的引用也发生了变化,对字符串未发生影响。返回
Today is Friday
Today is Friday
把String
改成了StringBuffer
,并修改了内容,字符串的值发生了变化,说明字符串的变量加载是延迟的。
week = new StringBuffer("Friday")
text = "Today is $week"
println text
week.replace(0, 6, "Thursday")
println text
返回
Today is Friday
Today is Thursday
把字符串表达式改成闭包
week = "Friday"
text = "Today is ${ -> week }"
println text
week = "Saturday"
println text
返回
Today is Friday
Today is Saturday
3. 正则表达式
~
操作符可以方便地创建正则表达式。
p = ~"hello"
println p.getClass().name
返回
java.util.regex.Pattern
为了匹配表达式,提供了=~
和==~
。=~
进行部分匹配,==~
进行完全匹配。
p = ~"hello"
text = "hello world"
if (text =~ p) {
println "match"
} else {
println "not match"
}
if (text ==~ p) {
println "match"
} else {
println "not match"
}
返回
match
not match
=~
返回一个Mather
对象
p = ~"(h|H)ello"
text = "hello world! Hello BeiJing!"
matcher = text =~ p
println matcher.getClass().name
println matcher.size()
println "${matcher[0]} and ${matcher[1]}"
返回
java.util.regex.Matcher
2
[hello, h] and [Hello, H]
替代方法replace()
p = ~"(h|H)ello"
text = "hello world! Hello BeiJing!"
result = (text =~ p).replaceAll("Hi")
println result
返回
Hi world! Hi BeiJing!