【问题标题】:replaceAll "|" by "$" in java全部替换“|”通过 java 中的“$”
【发布时间】:2016-01-21 17:21:03
【问题描述】:

我已尝试替换所有“|”通过“2”使用以下代码:

 String myString = "I want to change | with 2";
 String trimedString = myString.replaceAll("|", "2");
 System.out.print(trimedString);

我的预期输出是:

"I want to change | with 2"

但真正的输出是:

"2I2 2w2a2n2t2 2t2o2 2c2h2a2n2g2e2 2|2 2w2i2t2h2 222"

它在每个字符之前和之后添加了 2。这样做的正确方法是什么?

【问题讨论】:

  • 管道字符必须在正则表达式中转义,尝试“\\|”而不是“|” .
  • | 是正则表达式中的特殊字符,因此您需要对其进行转义:\|(或 java 字符串中的 "\\|")。
  • 顺便说一句,您的替换和您的预期输出不匹配。假设你修复了你会得到 "I want to change 2 with 2" 的正则表达式
  • 成功了!!谢谢@Thomas

标签: java replaceall


【解决方案1】:

您必须在管道符号前面插入两个反斜杠才能将其转义。

String myString = "I want to change | with 2";
String trimedString = myString.replaceAll("\\|", "2");
System.out.print(trimedString);

【讨论】:

    【解决方案2】:

    如果您使用replaceAll,则第一个参数将被视为正则表达式。因此,您需要转义 |,这是一个正则表达式元字符:

    String trimedString = myString.replaceAll("\\|", "2")
    

    或者,您可以使用replace() 方法之一代替replaceAll()。它们仍然替换所有出现,但不使用正则表达式匹配。例如:

    String trimedString = myString.replace("|", "2");
    

    将每个参数视为文字字符串。或者,由于您正在进行单字符替换,您可以使用:

    String trimedString = myString.replace('|', '2');
    

    这将是迄今为止最有效的。

    【讨论】:

      【解决方案3】:

      您可能是 String 类中 replace 方法中使用的命名的又一个受害者。

      大多数人介绍了这些方法(基于名称的不同),认为replaceAll(target,replacement)replace(target,replacement) 的不同之处在于replace 不会替换所有出现的目标(因为它没有All 后缀)。但这不是真的,这两种方法都将替换所有目标。

      它们之间真正的区别在于:

      • replaceAll 正在使用正则表达式 (regex) 语法,并且某些字符在那里很特殊,例如您的 |,因此您需要先对其进行转义 "\\|"(也 $ 在替换部分中很特殊,因此您需要转义它在那里)
      • replace 使用文字。

      所以在你的情况下,你可以简单地使用

      String trimedString = myString.replace("|", "2");
      

      所以

      • 当您看到replaceAll 时,将其视为replaceRegex
      • 当您看到replaceFirst 时,它的意思是replaceRegexOnce
      • 当您看到replace 时,将其视为replaceAllLiterals

      【讨论】:

        猜你喜欢
        • 2016-06-20
        • 2014-06-17
        • 1970-01-01
        • 1970-01-01
        • 2012-11-27
        • 2015-03-06
        • 1970-01-01
        • 1970-01-01
        • 2016-02-23
        相关资源
        最近更新 更多