假设我有一个
List<String>
和一个空的 List<Pattern>
,以下是将 String 中的单词转换为 Pattern 对象的最佳方法:for(String word : stringList) {
patterns.add(Pattern.compile("\\b(" + word + ")\\b);
}
然后稍后运行此字符串:
for(Pattern pattern : patterns) {
Matcher matcher = pattern.matcher(myString);
if(matcher.matches()) {
myString = matcher.replaceAll("String[$1]");
}
}
replaceAll只是一个例子,但在我使用它时,$1将被大多数使用。
有没有更有效的方法?因为我觉得这有点笨重。顺便说一下,我正在使用80个字符串列表,虽然使用的字符串是可配置的,所以不会总是有这么多。
这是设计成一种骂人过滤器,所以我会让你假设列表中的单词,
输入的一个例子是"You're a <curse>"
,输出将是"You're a *****"
,尽管这可能并不总是这样,而且在某些时候我可能会从HashMap<String, String>
读取,其中键是捕获组,值是替换。
示例:
if(hashMap.get(matcher.group(1)) == null) {
// Can't test if \ is required. Used it here for safe measure.
matcher.replaceAll("\*\*\*\*");
} else {
matcher.replaceAll(hashMap.get(matcher.group(1));
}
\\b
是行不通的。如果在开头和结尾都不加\\b
会有什么问题? - Avinash Raj