使用流从字符串中删除多个字符串

问题描述 投票:1回答:2

我有一个字符串列表和一个字符串。如果该字符串具有任何列表,那么我需要将其删除。

我使用下面的方法,并且工作正常。我只是想知道是否可以使用Stream API替换它?

List<String> exclude = getExcludeList();

String phrase = "My test phrase";

for(String str : exclude){
phrase = phrase.replace(str, "");
}
java stream
2个回答
0
投票

您可以形成一个由列表中的字符串组成的正则表达式替代,然后进行正则表达式替换以从短语中删除它们:

List<String> exclude = getExcludeList();
String phrase = "My test phrase";
String regex = exclude.stream().collect(Collectors.joining("|", "\\b(?:", ")\\b"));
phrase = phrase.replaceAll(regex, "");

0
投票

这很丑陋,因为您要修改流内部的非流变量,并且流只能从其作用域之外有效访问最终变量。

但是它是可行的:

String[] holder = new String[] {phrase};

exclude.stream().foreach(s -> phrase[0] = phrase[0].replace(s, "");
© www.soinside.com 2019 - 2024. All rights reserved.