您的位置:首页 > 其它

【Groovy手札】Groovy的字符串

2016-01-22 20:26 148 查看
Groovy提供不同的字符串表现形式,包括:

def map
= [:]

map.'单引号'

map."双引号"

map.'''三重单引号'''

map."""三重双引号"""

map./单斜杠字符串/

map.$/美元单斜杠字符串/$

Groovy同样支持Java的字符串类型(java.lang.String),而且也有自己的可插值字符串(groovy.lang.GString)。

2.1
单引号字符串
单引号字符串是指由包含在单引号之间的字符序列:

'a singlequoted string'
单引号字符串会被Groovy编译器解释为
java.lang.String,
并且不支持内插。

2.2
字符串拼接
所有的Groovy字符串都可以由操作符 + 进行拼接:

assert 'ab'
== 'a'
+ 'b'

2.3
三重单引号字符串
三重单引号字符串是指由包含在连续的三个单引号之间的字符序列:

'''a triplesingle quoted string'''
三重单引号字符串同样会被Groovy编译器解释为
java.lang.String,
并且不支持插值。但是三重单引号字符串支持多行(multiline)输入,

def aMultilineString
=
'''lineone

line two

line three'''
2.4
特殊字符
Groovy中的特殊字符包括:

'\t'
tabulation(制表符)
'\b'
backspace(退格键)
'\n'
newline(新行)
'\r'
carriage return(回车键)
'\f'
formfeed(换页符)
'\\'
反斜杠
'\''
单引号
'\"'
双引号
2.5
双引号字符串
双引号字符串是指由包含在双引号之间的字符序列:

"adouble quoted string"
在没有内插的表达式时,编译器会将其转换成
java.lang.String,
如果存在需要转换的表达式,则会将其转换成
groovy.lang.GString实例。

2.6
字符串插值
除了单引号和三重单引号字符串以外,所有剩下的GroovyString表达式都可以进行插值操作。需要插值的地方使用一个占位符代替,可以使用${} 或者对于.表达式使用$ 前缀。Groovy的GString会通过调用 toString() 方法来转换得到字符串对象。

def name
='Guillaume'
// a plain string

def greeting
=
"Hello${name}"

assert greeting.toString()
==
'Hello Guillaume'

而且,任何的Groovy表达式都是有效的:

def sum
="The sum of 2 and3 equals ${2 + 3}"

assert sum.toString()
==
'The sum of 2 and 3 equals 5'
其实不仅仅只有表达式,代码句也是可以放在占位符 ${}中的,只不过这个代码句的转换值是null而已。

def person
=
[name:'Guillaume',
age:
36]

assert
"$person.name is $person.age years old"
=='Guillaume is 36 yearsold'
但是仅仅对于 a.b, a.b.c,
这种.表达式是有效的,对于.表达式后面不是属性,而是方法的情况则会报出groovy.lang.MissingPropertyException 异常,例如:

def number
=
3.14

shouldFail(MissingPropertyException){

println "$number.toString()"

}
Groovy会认为你在尝试获取number对象的一个名为 toString的属性,所以可以认为"$number.toString()" 会被解释成"${number.toString}()".

2.7 GString和String的hashCodes
Java中String对象是不可变对象,但是GString对象是可变的,其表现值取决于插值。虽然groovy.lang.GString和java.lang.String可能会得到相同的结果,但是他们的hashCode是不一样的。

assert
"one: ${1}".hashCode()
!=
"one: 1".hashCode()

由于GString和String的哈希码不同,所以千万不要使用Gstring对象作为一个Map的Key。

def key
="a"

def m
=["${key}":
"letter${key}"]

assert m["a"]
==
null
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: