【Groovy手札】Groovy的字符串
来源:互联网 发布:网络延长器接法 编辑:程序博客网 时间:2024/04/29 04:39
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
- 【Groovy手札】Groovy的字符串
- 【Groovy手札】Groovy的List
- 【Groovy手札】Groovy的几种注释
- Groovy字符串
- Groovy探索 对字符串编写Groovy风格的代码
- groovy
- groovy
- Groovy
- Groovy
- Groovy
- groovy
- groovy
- Groovy
- Groovy
- Groovy
- Groovy
- groovy
- Groovy
- 『青云志』QingCloud Spark 服务新增 1.6.0 版本
- 状态压缩dp-HDU1074-Doing Homework
- 添加自定义MIB的三种方法
- Java内存模型
- 1203 判断浮点数是否相等
- 【Groovy手札】Groovy的字符串
- 一步步在GitHub上创建博客主页-最新版
- WiFi路由的PIN码与常见问题处理破解教程
- 零散知识整理
- Unity3D开发技巧:如何避开unity编辑器的那些坑
- Android radioButton布局及监听
- 04-Log rsyslog-mysql & loganalyzer
- ClustLib——A C++ Data Clustering Framework(二):杂项
- 如何上传代码到GitHub