【问题标题】:Pattern quote creates excessive amount of \Q and \E [closed]模式引用会产生过多的 \Q 和 \E [关闭]
【发布时间】:2015-11-17 22:25:49
【问题描述】:

在用 ArrayList S 中的任何模式替换字符串 X 时,新消息 N 会产生过多的正则表达式引号 \Q 和 \E。

他们是否有某种方式在阅读完消息后打破循环,或实施某种倒计时以防止垃圾邮件的摄政报价?

代码:

    List<String> index = new ArrayList<String>()
    index.add("This");
    index.add("test");
    String x = "This is a random test phrase";
    for (String s : index)
    {
        x = Pattern.quote(x);
        String new = x.replaceAll("(?i)"+s, "*"); //edit: forgot type
    }
    System.out.println(new);

输出运行:

[16:43:24] [Async Chat Thread - #0/INFO]:\Q\Q\Q\Q\Q\QThis is a random * phrase\E\\E\Q\\E\\E\Q\Q\\E\\E\Q\\E\\E\Q\Q\Q\\E\\E\Q\\E\\E\Q\Q\\E\\E\Q\\E\\E\Q\Q\Q\Q\\E\\E\Q\\E\\E\Q\Q\\E\\E\Q\\E\\E\Q\Q\Q\\E\\E\Q\\E\\E\Q\Q\\E\\E\Q\\E\\E\Q\Q\Q\Q\Q\E\\E\Q\\E\\E\Q\Q\\E\\E\Q\\E\\E\Q\Q\Q\\E\\E\Q\\E\\E\Q\Q\\E\\E\Q\\E\\E\Q\Q\Q\Q\E\\E\Q\\E\\E\Q\Q\\E\\E\Q\\E\\E\Q\Q\Q\E\\E\Q\\E\\E\Q\Q\E\\E\Q\E

【问题讨论】:

  • new 是关键字,而不是标识符。请显示可编译的代码。
  • 您必须引用模式,而不是输入字符串。您还需要将更改应用于已修改的字符串,而不是原始字符串。见this demo。这是你想要达到的目标吗?
  • @stribizhev 那绝对没有做任何事情。仍然会创建大量的 \Q 和 \E

标签: java regex for-loop replace


【解决方案1】:

这是你想要的吗?我不太确定你期望什么输出。

    List<String> index = new ArrayList<String>();
    index.add("This");
    index.add("test");
    String x = "This is a random test phrase";
    for (String s : index)
    {
        x = x.replaceAll(s, "*");
    }
    System.out.println(x);

产生* is a random * phrase

【讨论】:

  • 如果您不确定,为什么要发布答案?
  • @stribizhev 因为显然,我猜对了。 :D
  • 你当然是。我也是。
猜你喜欢
  • 2013-12-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-17
  • 2010-10-10
  • 2014-06-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多