2014-02-13 34 views
1

在所有我已閱讀的教程中,他們總是說\ s匹配一個空格。那麼,爲什麼這個指令什麼在Java中匹配

System.out.println("line1 \n line2".replaceAll("\\s\\s*", " ")); 

有這樣的輸出:

line1 line2 

感謝您的答覆。

+3

你會期望它返回什麼? – ajb

+0

我希望:line1 \ n line1 – Hunsu

+1

正如其他人所說,'\ n'是空格。如果您只想替換空格,則使用空格而不是'\\ s';如果你想替換空格和製表符,那麼'[\\ t]'而不是'\\ s'。 – ajb

回答

5

字符串文字"\\s\\s*"相當於regular expression syntax\s\s*,它與「空白字符後跟零個或多個空白字符」相匹配。

空白字符定義爲[ \t\n\x0B\f\r],其中包括空格換行符。

+1

而'\ s \ s *'與'\ s +'相同。 –

+0

什麼是\ x0B字符 – Hunsu

+1

@ user230137'\ x0B'是ASCII中的「垂直製表符」(VT)。 – ajb

3

\\s匹配一個空白字符,其中的空格字符是 - [ \t\n\x0B\f\r]。這不僅僅是一個空間。我懷疑這是你從空白中推斷出來的。請參見Pattern類文檔。

此外,您可以用\\s+替換正則表達式\\s\\s*

1

首先,這個正則表達式有點愚蠢:\\s\\s*將匹配一個或多個空白字符,因爲\\s字符類匹配所有空格。

但是,它可以更容易地表達爲\\s+,它完成了完全相同的事情。

+0

從技術上講,不是所有* [空格字符](http://en.wikipedia.org/wiki/Whitespace_character) - 只是ASCII平面中的那些字符。 – user2864740

2

"\\s\\s*"\s\s*轉義版本,這是相同的\s+

它maches一個或多個任何空白炭。空格字符是[ \t\n\x0B\f\r]。所以它會在每場比賽中只用一個替換多個空格。