【发布时间】: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