【问题标题】:String.replaceAll() and \n line breaksString.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);

输出:

测试n测试



期望的输出:

测试\n测试

【问题讨论】:

    标签: java string replaceall


    【解决方案1】:

    来自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");
    

    【讨论】:

      【解决方案2】:

      不要使用replaceAll()

      replaceAll() 进行 regex 搜索和替换,但您的任务不需要 regex - 只需使用纯文本版本 replace() 替换 所有次。

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

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

      输出:

      TEST\nTEST
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-11-09
        • 1970-01-01
        • 1970-01-01
        • 2014-10-16
        • 2013-12-02
        相关资源
        最近更新 更多