深入了解groovy:(3)GString/String

groovy有两种字符串:String和GString
GString即支持占位插值符${}的字符串。

1.四类字符串

1.单引号字符串

def x = "123"
def str = 'abc' //不可变字符串,不支持占位插值符$
def str1 = 'abc${x}' //无法解析${x} 结果为abc${x}

2.双引号字符串

def x = "123"
def str = "abc${x}" //可变字符串,支持占位插值符$ 结果为abc123,{}可以省略

3.三个单引号字符串

def x = "123"
def str = '''abc${x}''' //可以多行输入,不支持占位插值符$,结果为abc${x}
def str1 = '''
hello
world
'''
//结果为
hello
world

4.三个双引号字符串

def x = "123"
def str = """abc $x""" //可以多行输入,支持占位插值符$,结果为abc 123

总结:
只有双引号或者三个双引号的字符串才能成为GString,在${ }之间可以写任意代码。
要注意的是:
$与要替换的变量之间不能用空格和其它符号。

def x = "123"
def str = "$ {x}" //会报错
def str1 = "$ x" //会报错 
def str2 = "$(x)" //会报错 

当替换的变量要调用函数时不能省略{ }

def x = 123
def str = "$x.toString()" //会报错
def str = "${x.toString()}" //正确写法

2.字符串方法:split()/tokenize()

基本和java的一样,这里主要介绍一下split和tokenize函数的不同。两个函数都是根据给出的字符/字符串切割字符串。不同之处有三个。
2.1返回值类型不同

def str = "hello,world"
println str.split().class //返回值为字符串数组
println str.tokenize().class //返回值为list

2.2 split会保留切割后产生的空格,tokenize自动去除空格

def str = "hello,world"
println str.split("l") //[he,,o,wor,d]
println str.tokenize("l") //[he,o,wor,d]

2.3 split用给出的字符串整体切割,tokenize用给出的字符串的字符元素切割

def str = "hello,world"
println str.split("lo") //用"lo"切割,[hel, ,world]
println str.tokenize("lo") //用"l","o"切割,[he, ,w, r, d] 注意:此处",w"是一个整体,不是连续的两个逗号
println str.tokenize("el") //用"e","l"切割,[h, o ,wor, d]

你可能感兴趣的:(groovy,java,groovy)