使用java中的regexp替换字符串中的特殊字符}}

时间:2018-01-02 01:20:38

标签: java regex string

我试图用java中的regexp替换字符串中的特殊字符}},我厌倦了以下两种方法而且它不起作用。请告诉我这些陈述有什么问题。

注意字符串也包含}我想保留。目标是只替换}}

  

方法1

    String buffer = obj.toJSONString() + ",";
    String result = buffer.replaceAll(Pattern.quote("(?<![\\w\\d])}}(?![\\w\\d])"), "");
  

方法2

Pattern.compile("(?<![\\w\\d])}}(?![\\w\\d])").matcher(buffer).replaceAll("");

4 个答案:

答案 0 :(得分:3)

以下quote

  String result = buffer.replaceAll(Pattern.quote("(?<![\\w\\d])}}(?![\\w\\d])"), "");

表示将正则表达式视为文字字符串。那是错的。

如果您只是想删除所有}}而不考虑上下文:

  String result = buffer.replaceAll(Pattern.quote("}}"), "");

如果您需要尊重上下文,请不要Pattern.quote(...)正则表达式!

另一个问题在于您尝试指定字符类的方式。由于\d\w的子集,因此无需将它们组合在一起。只需这样做:

  String result = buffer.replaceAll("(?<!\\w)\\}\\}(?!\\w)"), "");

我不确定引用}字符是否完全必要,但如果没有必要,则无害。

答案 1 :(得分:1)

不要&#39;使用RUN mkdir -p $CATALINA_HOME/logs,使用文字正则表达式模式,并转义括号:

Pattern.quote

使用Stringbuffer = obj.toJSONString() + ","; String result = buffer.replaceAll("(?<![\\w\\d])\\}\\}(?![\\w\\d])", ""); 告诉正则表达式引擎将字符串视为文字。这确实意味着括号不必被转义,但它也会使你的外观成为文字文本,可能不是你想到的。

答案 2 :(得分:0)

方法2仍然需要转义特殊字符}

Pattern.compile("(?<![\\w\\d])\\}\\}(?![\\w\\d])").matcher(buffer).replaceAll("");

答案 3 :(得分:0)

请与Apache StringUtils一样尝试。它更快,应该适用于您的情况。请查找以下链接以供参考。

  1. apache-stringutils-vs-java-implementation-of-replace

  2. Apache StringUtils 3.6