这篇来一个字符串切割的练习,很多人知道字符串切割是用split()方法,但是很少人知道在groovy中,有一个方法叫tokenize(),这两个方法其实都可以实现字符串切割,但是两者还是有区别的,本篇就来学习和掌握两者的共同点和区别。我也是,之前第一选择就是使用split()函数,直到知道有tokenize()方法,
1.split()得到结果是一个字符串数组,tokenise()得到结果是一个List
1
2
3
4
5
6
7
8
9
10
11
12 1def demo_string = "你好 Anthony"
2
3out1 = demo_string.split()
4out2 = demo_string.tokenize()
5println out1
6println out2
7boolean b1 = out1 instanceof String[]
8boolean b2 = out2 instanceof List
9println b1
10println b2
11
12
2.split()得到结果允许保留空字符串,tokenize()得到结果是List,不会保留空字符串
1
2
3
4
5
6
7 1def demo_string = "Hello Anthony"
2
3out1 = demo_string.split("l")
4out2 = demo_string.tokenize("l")
5println out1
6println out2
7
测试结果:
1
2
3
4 1[He, , o Anthony]
2[He, o Anthony]
3
4
上面这个例子,由于切割之后存在空的字符串,如果有些场景需要遍历切割之后结果集,如果元素为空,调用有些方法可能存在空指针,特别是在Java语言中,
所以有经验的程序员出于这个考虑,大部分情况下使用tokenize()来进行字符串切割。
3.tokenize()每一个字符都切割出来,而split()会一个单词切割出来
1
2
3
4
5
6
7
8
9 1def demo_string = "Hello world"
2
3out1 = demo_string.split('lo')
4out2 = demo_string.tokenize('lo')
5println out1
6println out2
7
8
9
测试结果
1
2
3 1[Hel, world]
2[He, w, r, d]
3
从这个案例来说,如果你切割之后只拿切割的左边部分,右边不考虑,而且考虑是否空值,那么建议选择tokenize()方法。如果你切割之后,右半边有元素也需要,那么选择split()是最合适的,毕竟右边如果用tokenize()会切割乱七八糟,造成字符串字符丢失。
4.split()中分隔符可以使用正则,但是tokenize()不支持正则
1
2
3
4
5
6
7 1
2def demo_string = "hello world 123 herload"
3
4out1 = demo_string.split(/\d{3}/)
5println out1
6
7
上面/xxxx/ 中的xxx部分是正则表达式,测试结果:
1
2 1[hello world , herload]
2
本篇就总结了下split()和tokenize()两种常见的字符串分割的相同和区别的地方。下一篇的练习,我们会用到字符串分割。