需求
針對tab鍵帶來的多個空格問題,有時候我們針對帶空格的一行數據要進行切割,如果有多個空格就會出現就會切割空格出現,我們想把空格都去掉,所以需要用到某些方法。
解決方案
利用正則表達式來匹配空格
\\s+
首先利用split("\\s+");方法來對字符串切割,盡可能的匹配空格,這里也挺有意思,因為空格數目不一樣,可以動態變換匹配的空格數量,這個實現原理可以看看底層原理,挺有意思。
測試:
String string="a b a a ";
for(String a:string.split("\\s+")){
System.out.println(a);
}
1
2
3
4
擴充知識
正則表達式的() [] {}有不同的意思。
() 是為了提取匹配的字符串。表達式中有幾個()就有幾個相應的匹配字符串。(\s*)表示連續空格的字符串。
[]是定義匹配的字符范圍。比如 [a-zA-Z0-9] 表示相應位置的字符要匹配英文字符和數字。[\s*]表示空格或者*號。
{}一般用來表示匹配的長度,比如 \s{3} 表示匹配三個空格,\s{1,3}表示匹配一到三個空格。
(0-9) 匹配 '0-9′ 本身。 [0-9]* 匹配數字(注意后面有 *,可以為空)[0-9]+ 匹配數字(注意后面有 +,不可以為空){1-9} 寫法錯誤。
[0-9]{0,9} 表示長度為 0 到 9 的數字字符串
1
2
3
4
5
6
()和[]有本質的區別
()內的內容表示的是一個子表達式,()本身不匹配任何東西,也不限制匹配任何東西,只是把括號內的內容作為同一個表達式來處理,
例如:(ab){1,3},就表示ab一起連續出現最少1次,最多3次。如果沒有括號的話,ab{1,3},就表示a,后面緊跟的b出現最少1次,最多3次。另外,括號在匹配模式中也很重要。這個就不延伸了,LZ有興趣可以自己查查
[]表示匹配的字符在[]中,並且只能出現一次,並且特殊字符寫在[]會被當成普通字符來匹配。例如[(a)],會匹配(、a、)、這三個字符。
所以() [] 無論是作用還是表示的含義,都有天壤之別,沒什么聯系
————————————————
版權聲明:本文為CSDN博主「予亭」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/randompeople/article/details/78066442