我有一个字符串列表和一个字符串。如果该字符串具有任何列表,那么我需要将其删除。
我使用下面的方法,并且工作正常。我只是想知道是否可以使用Stream API替换它?
List<String> exclude = getExcludeList();
String phrase = "My test phrase";
for(String str : exclude){
phrase = phrase.replace(str, "");
}
您可以形成一个由列表中的字符串组成的正则表达式替代,然后进行正则表达式替换以从短语中删除它们:
List<String> exclude = getExcludeList();
String phrase = "My test phrase";
String regex = exclude.stream().collect(Collectors.joining("|", "\\b(?:", ")\\b"));
phrase = phrase.replaceAll(regex, "");
这很丑陋,因为您要修改流内部的非流变量,并且流只能从其作用域之外有效访问最终变量。
但是它是可行的:
String[] holder = new String[] {phrase};
exclude.stream().foreach(s -> phrase[0] = phrase[0].replace(s, "");