2012-07-12 72 views
2

我正在編寫一個代碼來替換字符串中的換行符。在Windows上,當我使用替換UNIX中的換行符

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

這工作正常,但它在UNIX中失敗。

我應該在UNIX中使用什麼?

+0

@ Tichodroma的編輯破壞了代碼。現在它說'\\ n'而不是'\ n'。 – C0deH4cker 2012-07-12 17:27:39

回答

1

\n對於Unix是正確的。 Windows使用\r\n,Mac使用\r IIRC。

問題可能在於,作爲多平臺語言的Java會自動用系統的分隔符替換\n。我不知道Java,但我認爲這是事實。

編輯:如果您發佈的代碼是您正在使用的代碼,我想我會看到問題。 String是一類。它在Java中也是不可變的。這應該不是這樣:

String myStr = "abc\ndef"; 
myStr = myStr.replaceAll(/* params */); 
+0

在我的情況下,從某處我收到一個文本,我必須將其設置爲一個字符串。並且當在字符串中按下一個ENTER鍵時,它會出現兩行,所以想用\ n替換它,以便在執行新字符串時正確顯示。 當我在Windows中使用時,java代碼做它應該做的,但不是在Unix中。 所以我應該使用String.replaceAll(「\ n」,「\\ n」); ?? – jasmeet24 2012-07-12 06:30:12

0

接收文本可能包含的窗口行分隔符,所以僅更換\n性格沒有影響。

如果您不知道文本的來源(或文本包含行分隔符的混合),以下方法可以提供幫助。首先將windows和mac line分隔符轉換爲unix分隔符,然後將unix分隔符轉換爲系統分隔符。

final String DOS = "\r\n", NIX = "\n", MAC = "\r"; 
String converted = original.replace(DOS, NIX) 
          .replace(MAC, NIX) 
          .replace(NIX, System.lineSeparator());