【问题标题】:How Java replaceAll operation works with backslashes?Java replaceAll 操作如何与反斜杠一起使用?
【发布时间】:2015-09-15 11:12:19
【问题描述】:

为什么我需要四个反斜杠 (\) 才能在 String 中添加一个反斜杠?

String replacedValue = neName.replaceAll(",", "\\\\,");

在上面的代码中,您可以检查我必须从\, 替换所有逗号(,),但我必须再添加三个反斜杠(\)?

谁能解释一下这个概念?

【问题讨论】:

标签: java replaceall


【解决方案1】:

Java 转义一次,正则表达式转义一次。

\ -> \\ -> \\\\

或者由于您实际上并没有使用正则表达式,请接受khelwood 的建议并使用replace(String,String),这样您只需转义一次。

【讨论】:

    【解决方案2】:

    String.replaceAll(regex, replacement) 的文档指出:

    请注意,替换字符串中的反斜杠 (\) 和美元符号 ($) 可能会导致结果与将其视为文字替换字符串时的结果不同;请参阅 Matcher.replaceAll。

    Matcher.replaceAll(replacement) 的文档接着说:

    反斜杠用于转义替换字符串中的文字字符

    所以更清楚地说,当您替换为\, 时,就好像您在转义逗号。但是你真正想要的是\ 字符,所以你应该用\\, 转义它。由于在Java中,\也需要转义,替换的String变成\\\\,

    如果您很难记住所有这些,可以使用方法Matcher.quoteReplacement(s),其目标是正确地转义替换部分。您的代码将变为:

    String replacedValue = neName.replaceAll(",", Matcher.quoteReplacement("\\,"));
    

    【讨论】:

      【解决方案3】:

      \ 用于转义序列

      例如

      • 转到下一行然后使用\n\r
      • 标签\t
      • 同样打印\,它在字符串文字中是特殊的,你必须用另一个\来转义它,这给了我们\\

      现在 replaceAll 应该与正则表达式一起使用,因为您没有使用正则表达式,请按照 cmets 中的建议使用 replace

      String s = neName.replace(",", "\\,"); 
      

      【讨论】:

        【解决方案4】:

        您必须首先转义反斜杠,因为它是文字(给出\\),然后因为正则表达式而再次转义(给出\\\\)。

        因此-

        String replacedValue = neName.replaceAll(",", "\\\\,");  // you need ////
        

        你可以用replace代替replaceAll-

         String replacedValue = neName.replace(",", "\\,"); 
        

        【讨论】:

          猜你喜欢
          • 2020-05-30
          • 2019-01-01
          • 2022-06-15
          • 1970-01-01
          • 2012-12-09
          • 2011-10-11
          • 1970-01-01
          • 2010-10-18
          • 2011-09-06
          相关资源
          最近更新 更多