在所有我已閱讀的教程中,他們總是說\ s匹配一個空格。那麼,爲什麼這個指令什麼在Java中匹配
System.out.println("line1 \n line2".replaceAll("\\s\\s*", " "));
有這樣的輸出:
line1 line2
感謝您的答覆。
在所有我已閱讀的教程中,他們總是說\ s匹配一個空格。那麼,爲什麼這個指令什麼在Java中匹配
System.out.println("line1 \n line2".replaceAll("\\s\\s*", " "));
有這樣的輸出:
line1 line2
感謝您的答覆。
字符串文字"\\s\\s*"
相當於regular expression syntax\s\s*
,它與「空白字符後跟零個或多個空白字符」相匹配。
空白字符定義爲[ \t\n\x0B\f\r]
,其中包括空格和換行符。
\\s
匹配一個空白字符,其中的空格字符是 - [ \t\n\x0B\f\r]
。這不僅僅是一個空間。我懷疑這是你從空白中推斷出來的。請參見Pattern
類文檔。
此外,您可以用\\s+
替換正則表達式\\s\\s*
。
首先,這個正則表達式有點愚蠢:\\s\\s*
將匹配一個或多個空白字符,因爲\\s
字符類匹配所有空格。
但是,它可以更容易地表達爲\\s+
,它完成了完全相同的事情。
從技術上講,不是所有* [空格字符](http://en.wikipedia.org/wiki/Whitespace_character) - 只是ASCII平面中的那些字符。 – user2864740
"\\s\\s*"
是\s\s*
轉義版本,這是相同的\s+
它maches一個或多個任何空白炭。空格字符是[ \t\n\x0B\f\r]
。所以它會在每場比賽中只用一個替換多個空格。
你會期望它返回什麼? – ajb
我希望:line1 \ n line1 – Hunsu
正如其他人所說,'\ n'是空格。如果您只想替換空格,則使用空格而不是'\\ s';如果你想替換空格和製表符,那麼'[\\ t]'而不是'\\ s'。 – ajb