繁体   English   中英

使用Java中的regexp将字符串中的特殊字符}}替换为“”

[英]replace special character }} in a string with “” using regexp in java

我试图在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("");

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)"), "");

我不确定是否必须严格加上}字符,但是如果没有必要,则将其无害。

不要使用Pattern.quote ,使用原义的正则表达式模式,并转义括号:

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

使用Pattern.quote告诉正则表达式引擎将字符串视为文字。 这的确意味着不必将方括号括起来,但也会使您的环顾四周呈现为文字文本,可能不是您想的那样。

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

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

您能用Apache StringUtils尝试一下吗? 它的速度更快,并且应该适合您的情况。 请找到以下链接以供参考。

  1. Apache的StringUtils的-VS-Java的实现-的替换

  2. Apache StringUtils 3.6

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM