String.replaceAll()和\\ n换行符

最后发布: 2016-05-19 16:14:32


问题

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

版本1:

String s = "TEST";
s = s.replaceAll("TEST", "TEST\nTEST");
System.out.println(s);

输出:

测试

测试



版本2:

String s = "TEST";
s = s.replaceAll("TEST", "TEST\\nTEST");
System.out.println(s);

输出:

测试



所需输出:

测试\\ nTEST

java string replaceall
回答

String#replaceAll(String, String)javadoc中

请注意,替换字符串中的反斜杠( \\ )和美元符号( $ )可能导致结果与被当作文字替换字符串的结果有所不同。 参见Matcher.replaceAll 如果需要,请使用Matcher.quoteReplacement(java.lang.String)取消显示这些字符的特殊含义。

s = s.replaceAll("TEST", Matcher.quoteReplacement("TEST\\nTEST"));

您仍然需要2个反斜杠,因为\\是字符串文字的元字符。


您也可以在没有Matcher.quoteReplacement情况下使用4个反斜杠:

  • 你想要一个\\在输出中
  • 您需要使用\\对其进行转义,因为\\是替换字符串的元字符: \\\\
  • 您需要使用\\进行转义,因为\\是字符串文字的元字符: \\\\\\\\
s = s.replaceAll("TEST", "TEST\\\\nTEST");


回答

不要使用replaceAll()

replaceAll()做一个正则表达式搜索和替换,但你的任务并不需要正则表达式-只使用纯文本版本replace() 替换所有出现。

您需要一个文字反斜杠,在Java String文字中编码为两个反斜杠:

String s = "TEST";
s = s.replace("TEST", "TEST\\nTEST");
System.out.println(s);

输出:

TEST\nTEST