2012-03-24 81 views
23

我有一個字符串,並希望簡單地用字符串" --linebreak-- "替換它中的所有換行符。Java正則表達式 - 使用字符串的replaceAll方法來替換換行符

難道是不夠的,只是寫:

string = string.replaceAll("\n", " --linebreak-- "); 

我很困惑與它的正則表達式的一部分。我需要兩個斜槓來換行嗎?這夠好嗎?

+1

無論是作品。請參閱[這個問題]的答案(http://stackoverflow.com/questions/9113328/java-regular-expression-need-to-escape-backslash-in-regex)一個很好的解釋。 – 2012-03-24 04:06:14

回答

32

不要使用正則表達式!。你只需要一個明文匹配來替換"\n"

使用replace()與另一個替換一個字符串:

string = string.replace("\n", " --linebreak-- "); 

注意replace()仍然取代所有事件一樣,replaceAll() - 不同的是,replaceAll()使用正則表達式來進行搜索。

+2

那麼你是說在循環內部使用replace()而不是使用replaceAll()一次?我不明白爲什麼這是一個更好的主意? – Tim 2012-03-24 19:48:33

+4

@Tim調用'replace()* *一次*替換*所有*出現(不需要「循環」) – Bohemian 2012-03-24 23:40:36

+0

哦哇。謝謝,由於某種原因,我在閱讀規範時忽略了這一點。 – Tim 2012-03-25 15:50:33

3

無需2 backslashes

String string = "hello \n world" ; 
String str = string.replaceAll("\n", " --linebreak-- "); 
System.out.println(str); 

輸出= hello --linebreak-- world

29

使用正則表達式如下:

s.replaceAll("\\r?\\n", " --linebreak-- ") 

這裏只有真正兩個用於UNIX和Windows操作系統的換行符。

1

新線有一個屬性

System.getProperty("line.separator") 

這裏爲你的榜樣,

string.replaceAll("\n", System.getProperty("line.separator")); 
2

剛剛添加該的完整性,因爲這2個反斜槓的事情是真實的。

參考@dasblinkenlight在下面的SO問題的答案(談論\ t,但它適用於\ n以及):

java, regular expression, need to escape backslash in regex

「有轉義序列的兩種解釋事情:第一當Java編譯器看到兩個斜槓時,它將用一個斜槓代替它們,當斜槓後面有一個斜槓時,Java用一個標籤替換它;當在下一個雙擊標籤時,斜線,Java將它獨立出來,但是,因爲兩個斜線被單斜線替代,正則表達式引擎會看到\ t,並將其解釋爲一個標籤。「

+0

發生的另一件事是,第一個替換all的參數可以是一個扁平字符串或正則表達式。在字符串中,「\ n」被解釋爲文字,但如果您包含其他正則表達式符號,就像括號中的字符集一樣,那麼您需要額外的斜線才能獲得正確的字符串到正則表達式編譯器。 .....例如,「[\\ r \\ n] +」 – Rondo 2015-12-18 00:41:53

10

由於Java 8正則表達式引擎支持\R,它代表任何行分隔符(稍微更多信息:https://stackoverflow.com/a/31060125/1393766)。

所以,如果你有機會到Java 8,你可以使用

string = string.replaceAll("\\R", " --linebreak-- ");