【问题标题】:Using replaceAll with Strings containing special characters in Java在 Java 中将 replaceAll 与包含特殊字符的字符串一起使用
【发布时间】:2012-08-19 07:32:43
【问题描述】:

基本上,这就是我想要做的:

String s = "to+go+la";

s.replaceAll("to+go", "");

应该返回"+la"

我知道如果我只是替换 + 符号,我会使用 \\+,但我不确定嵌入符号后我该怎么做。将它们从两者中删除是最好的答案吗?这将适用于我的目的,但它似乎是一个管道胶带的答案。

【问题讨论】:

  • 嵌入式是什么意思?你能举个例子吗?
  • 同理,加号在“to+go”中间

标签: java special-characters replaceall


【解决方案1】:

...但这似乎是胶带的答案。

这似乎是一个“胶带”的答案,因为您还没有了解为什么在仅替换“+”字符时需要使用 \+

答案是“+”是一个正则表达式元字符。它的意思是“在此之前的字符或组可能出现一次或多次”。


如果您希望 "to+go" 被视为文字字符串(而不是正则表达式),那么执行此操作的一种方法是“正则表达式引用”它;例如

s.replaceAll(Pattern.quote("to+go"), "");

另一方面,如果 + 字符完全不相关,那么删除它们也可以...

【讨论】:

  • 不,我的意思是先从两者中删除加号,然后再尝试从另一个中删除。它对我有用,因为我计划最终去掉加号,但如果我不这样做,那将是一个问题。
  • 谢谢。这是我正在寻找的确切答案。
【解决方案2】:

您的案例不需要正则表达式,因此使用它是不合适的。它既慢又麻烦。使用简单明了的replace 而不是replaceAll,您无需转义任何内容:

String s = "to+go+la".replace("to+go", "");

【讨论】:

    【解决方案3】:

    这个怎么样:

      String input = "to+go+la";
      String result = input.replaceAll("to\\+go","");
      System.out.println(result);
    

    为什么这是一个糟糕的模式?你说的嵌入式是这样的吗?

     String input = "to+++go+la";
    

    如果是这样,那么唯一会改变的是模式:

     String result = input.replaceAll("to(\\+)+go","");
    

    【讨论】:

      猜你喜欢
      • 2020-12-25
      • 2015-07-23
      • 1970-01-01
      • 2020-07-12
      • 2016-08-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多