1. 程式人生 > >Jenkins高階篇之Pipeline實踐篇-2-groovy中字串操作split()和tokenize()區別

Jenkins高階篇之Pipeline實踐篇-2-groovy中字串操作split()和tokenize()區別

這篇來一個字串切割的練習,很多人知道字串切割是用split()方法,但是很少人知道在groovy中,有一個方法叫tokenize(),這兩個方法其實都可以實現字串切割,但是兩者還是有區別的,本篇就來學習和掌握兩者的共同點和區別。我也是,之前第一選擇就是使用split()函式,直到知道有tokenize()方法,

1.split()得到結果是一個字串陣列,tokenise()得到結果是一個List

def demo_string = "你好 Anthony"

out1 = demo_string.split()
out2 = demo_string.tokenize()
println out1
println out2
boolean b1 = out1 instanceof String[]
boolean b2 = out2 instanceof List
println b1
println b2

2.split()得到結果允許保留空字串,tokenize()得到結果是List,不會保留空字串

def demo_string = "Hello Anthony"

out1 = demo_string.split("l")
out2 = demo_string.tokenize("l")
println out1
println out2

測試結果:

[He, , o Anthony]
[He, o Anthony]

上面這個例子,由於切割之後存在空的字串,如果有些場景需要遍歷切割之後結果集,如果元素為空,呼叫有些方法可能存在空指標,特別是在Java語言中,所以有經驗的程式設計師出於這個考慮,大部分情況下使用tokenize()來進行字串切割

3.tokenize()每一個字元都切割出來,而split()會一個單詞切割出來

def demo_string = "Hello world"

out1 = demo_string.split('lo')
out2 = demo_string.tokenize('lo')
println out1
println out2

測試結果

[Hel,  world]
[He,  w, r, d]

從這個案例來說,如果你切割之後只拿切割的左邊部分,右邊不考慮,而且考慮是否空值,那麼建議選擇tokenize()方法。如果你切割之後,右半邊有元素也需要,那麼選擇split()是最合適的,畢竟右邊如果用tokenize()會切割亂七八糟,造成字串字元丟失。

4.split()中分隔符可以使用正則,但是tokenize()不支援正則


def demo_string = "hello world 123 herload"

out1 = demo_string.split(/\d{3}/)
println out1

上面/xxxx/ 中的xxx部分是正則表示式,測試結果:

[hello world ,  herload]

本篇就總結了下split()和tokenize()兩種常見的字串分割的相同和區別的地方。下一篇的練習,我們會用到字串分割。