AL̲*_*̲̳I 3 java arrays string list
我有一个列表或字符串数组
String [] elements = {"cat", "dog", "fish"};
Run Code Online (Sandbox Code Playgroud)
和一个字符串
String str = "This is a caterpillar and that is a dogger.";
Run Code Online (Sandbox Code Playgroud)
我想从字符串中删除数组/列表的所有项目(如果字符串中存在)。这样函数应该返回一个字符串
str = "This is a erpillar and that is a ger." (cat and dog removed from the string)
Run Code Online (Sandbox Code Playgroud)
我可以做这样的事情
private String removeElementsFromString (String str, String [] elements) {
if(Arrays.stream(elements).anyMatch(str::contains)){
for(String item : elements){
str = str.replace(item, "");
}
}
return str;
}
Run Code Online (Sandbox Code Playgroud)
但是将 for 循环更改为其他循环的优雅方法是什么?
下面的一行代码完成了这项工作:
str = str.replaceAll(Arrays.stream(elements).map(s -> "(?:" + s + ")").collect(Collectors.joining("|")), "");
Run Code Online (Sandbox Code Playgroud)
演示:
import java.util.Arrays;
import java.util.stream.Collectors;
public class Main {
public static void main(String[] args) {
String[] elements = { "cat", "dog", "fish" };
String str = "This is a caterpillar and that is a dogger.";
str = str.replaceAll(Arrays.stream(elements).map(s -> "(?:" + s + ")").collect(Collectors.joining("|")), "");
System.out.println(str);
}
}
Run Code Online (Sandbox Code Playgroud)
输出:
This is a erpillar and that is a ger.
Run Code Online (Sandbox Code Playgroud)
解释:
Arrays.stream(elements).map(s -> "(?:" + s + ")").collect(Collectors.joining("|"))结果进入正则表达式,(?:cat)|(?:dog)|(?:fish)这意味着 cator dogor fish。
下一步是将生成的正则表达式替换为"".