1. 程式人生 > >Brief introduction to Java String Split 【簡單介紹下Java String Split】

Brief introduction to Java String Split 【簡單介紹下Java String Split】

a-z include cte eve class some sim string arr

Split is a common function in Java. It split a full string to an array based on delimeter.

For example, split "a:b:c" with ":" results in [a, b, c]

In some scenario, it‘s better to keep the delimeter instead of discard it while splitting.

Here are some strategies.

分割(split) 是java裏一個常用的函數,它根據分隔符將完整的字符串切分成數組

比如 "a:b:c"通過":"切分會得到數組[a, b, c]

然而某些場景下,可能我們想要保留分隔符

這裏是一些保留分隔符的方法

System.out.println(Arrays.toString("a:b:c".split(":")));  //normal split
//[a, b, c]
System.out.println(Arrays.toString("a:b:c".split("(?=:)"))); //look behind
//[a, :b, :c]
System.out.println(Arrays.toString("a::b:c".split("(?=:)"))); //look behind
//[a, :, :b, :c]
System.out.println(Arrays.toString("a:b:c".split("(?<=:)"))); //look ahead
//[a:, b:, c]
System.out.println(Arrays.toString("a:b:c".split("(?!:)"))); //look ahead
//[a:, b:, c]
System.out.println(Arrays.toString("a:b:::c".split("(?!=:)"))); //look bothway
//[a, :, b, :, :, :, c]
System.out.println(Arrays.toString("a:b:::c".split("(?<=:)|(?=:)"))); //look bothway
//[a, :, b, :, :, :, c]

Look ahead 前向結合

delimeter will be attached to the previous string

分隔符會附加在前向字符串後面

Look behind 後向結合

delimeter will be attached to the subsequent string

分隔符會附加在後向字符串前面

Look bothway 完全分離

similar to normal split, but every delimeter will be included in the array

和普通分割很像,但每個分隔符也會出現在數組中

Some interesting usage

一些有趣的用法

System.out.println(Arrays.toString("1a2bb3ccc".split("(?<=[a-z])(?=[0-9])")));  //digit + [a-z]characters
//[1a, 2bb, 3ccc]
System.out.println(Arrays.toString("1_1112_222aditional3_333".split("(?<=_..)"))); //"_" with 2 more chars
//[1_11, 12_22, 2aditional3_33, 3]
System.out.println(Arrays.toString("1_1112_222aditional3_3333".split("(?<=_.{3})"))); //"_" with 3 more chars
//[1_111, 2_222, aditional3_333, 3]
System.out.println(Arrays.toString("1_1112_222aditional3_33".split("(?<=_.{3})"))); //"_" with 3 more chars
//[1_111, 2_222, aditional3_33]

Brief introduction to Java String Split 【簡單介紹下Java String Split】