String.replaceAll()和\ n换行符

时间:2016-05-19 16:14:33

标签: java string replaceall

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

版本1:

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

输出:

  

TEST

     

TEST



第2版:

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

输出:

  

TESTnTEST



期望的输出:

  

TEST \ NTEST

2 个答案:

答案 0 :(得分:6)

来自javadoc of String#replaceAll(String, String)

  

请注意替换中的反斜杠(\)和美元符号($)   字符串可能会导致结果与正确的结果不同   被视为字面替换字符串;见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");

答案 1 :(得分:3)

请勿使用replaceAll()

replaceAll()执行 regex 搜索和替换,但您的任务不需要正则表达式 - 只需使用纯文本版本replace()替换所有次出现。

您需要一个文字反斜杠,它在Java字符串文字中被编码为两个反斜杠:

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

输出:

TEST\nTEST