標籤:normal dig tac int arrays character better mon 簡單
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】