【问题标题】:Java string replacing (remove newlines, change $ to \$)Java 字符串替换(删除换行符,将 $ 更改为 \$)
【发布时间】:2014-03-11 13:19:19
【问题描述】:

我有一个这样的字符串($ 字符总是被其他字符包围):

a$b
c$d
e$f

我希望我的字符串方法在$ 前面放置一个\ 并删除换行符:

a\$bc\$de\$f

我试过了,但它没有输入\ 字符:

 s=s.replaceAll("\n","").replaceAll("$", "\\$");

【问题讨论】:

  • replaceAll 的第一个参数是一个正则表达式,如文档所示。正如任何正则表达式教程所表明的那样,$ 字符在正则表达式中具有意义。

标签: java regex string


【解决方案1】:

使用replace() 方法而不是replaceAll()。正如Michelle 正确指出的那样,replaceAll() 使用正则表达式,这会导致$ 字符出现问题,而replace() 是文字,这对于您的情况来说已经足够了。

【讨论】:

  • 这可能是值得注意的原因(因为replaceAll() 使用正则表达式,而 OP 不需要)。
【解决方案2】:

$是javaPatterns中的保留字符,表示行尾或输入结束。

您还需要逃避替换...三次。

试试replaceAll("\\$", "\\\\\\$")

【讨论】:

    【解决方案3】:

    像这样转义$

    s=s.replaceAll("\n","").replaceAll("\\$", "\\\\\\$");
    

    $replaceAll 方法的第一个参数的元字符。 第一个参数是一个正则表达式。从正则表达式的角度来看,$ 表示行尾或字符串。

    示例代码

    String s = "a$b\n" +
               "c$d\n" +
               "e$f\n";
    
    s = s.replaceAll("\n", "").replaceAll("\\$", "\\\\\\$");
    
    System.out.println(s);
    

    输出

    a\$bc\$de\$f
    

    【讨论】:

      【解决方案4】:

      你的问题是'$'是一个正则表达式元字符。也就是说,它具有特殊的意义。具体来说,“$”表示“字符串结尾”。

      由于您的模式中没有任何元字符,您可以改用 String.replace(),它只是替换文字字符串。

      s = s.replace("$","\\$");
      

      但是,如果您真的想使用replaceAll()(例如,如果您的模式的其他部分需要是元字符):

      如果要匹配实际的“$”,则需要转义模式中的“$”,使其成为文字“$”。

      \$
      

      那么你还需要为Java的引用转义'\',所以你最终得到:

       s = s.replaceAll("\\$","\\$");
      

      但是,'$'在第二个参数中仍然是一个元字符,所以我们需要更多:

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

      与您的其他替代者一起:

       s = s.replaceAll("\\$",Matcher.quoteReplacement("\\$")).replaceAll("\n","");
      

      【讨论】:

        【解决方案5】:

        S\ 是特殊字符:

        s = s.replaceAll("\n", "").replaceAll("\\$", "\\\\\\$");
        

        【讨论】:

        • 这与 Mena 的回答有何不同?
        • 不要忘记,如果您在发布后意识到已经发布了另一个答案(更好或相同),则删除您的帖子是免费的,以避免与不正确的答案混淆问题'不要添加任何东西。
        猜你喜欢
        • 1970-01-01
        • 2017-03-24
        • 1970-01-01
        • 2018-11-13
        • 1970-01-01
        • 2022-11-20
        • 2021-01-27
        • 1970-01-01
        • 2014-08-26
        相关资源
        最近更新 更多