簡體   English   中英

替換字符串中的\\ n

[英]replacing \n in a String

我的類似問題有幾個答案,但我已經嘗試了其中幾個並且它們不起作用。 我一定是在做一些愚蠢的事。

我有

String newline = System.getProperty("line.separator");
String content = "Test\n another line\n";
if(content.contains("\\n")) {
    content = content.replaceAll("(\\n)", newline);
    System.out.print(content);
}

我還在正則表達式中嘗試了“\\ n”和“\\\\ n”。 使用replaceAll保持內容不變。

好的事實:

  • \\r是CR,U + 000D
  • \\n是LF,U + 000A

那些你可以放在String中的字符

String s = "line 1.\nline 2.\n";
String newline = System.getProperty("line.separator");

newline可以是"\\n" (1個字符)或"\\r\\n" (2個字符)或者還有其他內容。

如果您要閱讀此文本,首先讀取反斜杠然后讀取n ,它將在代碼中:

String nl = "\\n"; // Two chars, an escaped backslash and a `n`.
String nl = "\\" + 'n'; // Two chars, an escaped backslash and a `n`.

如果你想用真正的換行替換這兩個字符:

s = s.replace("\\n", "\n");
s = s.replace("\\n", newline); // Platform dependent

現在java正則表達式仍然更加復雜,因為它使用反斜杠轉義正則表達式字母,這在字符串中會自行轉義:

你不需要在這里使用正則表達式replaceAll / replaceFirst,但它會像:

s = s.replaceAll("\\\\n", "\n");

包含兩個反斜杠的模式:正則表達式轉義一個反斜杠。

String newline = System.getProperty("line.separator");
String content = "Test\\n another line\\n";
if(content.contains("\\n")) {
    content = content.replaceAll("\\\\n", newline);
    System.out.print(content);
}

額外的2個斜杠是轉義字符

我也試過這個並且它有效

    content.replace("\\n", "\\r\\n") 

    content.replaceAll("\\n", "\\r\\n")

才不是。

所以最后我用了

    while(content.contains("\\n")) {
        content = content.replace("\\n", newline);
    }

這解決了我的問題,不優雅,但它的工作原理。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM