String.replaceAll()和\n换行符

Dav*_*enz 0 java string replaceall

我试着通过一个小例子来解释我的问题.我实现了版本1和版本2,但我没有得到所需的结果.我必须使用哪个替换参数来使用replaceAll方法获得所需的结果?

版本1:

String s = "TEST";
s = s.replaceAll("TEST", "TEST\nTEST");
System.out.println(s);
Run Code Online (Sandbox Code Playgroud)

输出:

测试

测试



版本2:

String s = "TEST";
s = s.replaceAll("TEST", "TEST\\nTEST");
System.out.println(s);
Run Code Online (Sandbox Code Playgroud)

输出:

TESTnTEST



期望的输出:

TEST\NTEST

sp0*_*00m 6

来自javadocString#replaceAll(String, String):

请注意,替换字符串中的反斜杠(\)和美元符号($)可能会导致结果与将其视为文字替换字符串时的结果不同; 看Matcher.replaceAll.使用 Matcher.quoteReplacement(java.lang.String)抑制这些字符的特殊含义,如果需要的话.

s = s.replaceAll("TEST", Matcher.quoteReplacement("TEST\\nTEST"));
Run Code Online (Sandbox Code Playgroud)

你仍然需要2个反斜杠,因为\字符串文字是一个元数据.


你也可以使用4个反斜杠Matcher.quoteReplacement:

  • 你想要一个\输出
  • 你需要逃避它\,就像\替换字符串的元数据一样:\\
  • 你需要同时使用\,以及\字符串文字的元数据:\\\\
s = s.replaceAll("TEST", "TEST\\\\nTEST");
Run Code Online (Sandbox Code Playgroud)