我有一个列表或一个字符串数组
String [] elements = {"cat", "dog", "fish"};
和一个字符串String str = "This is a caterpillar and that is a dogger.";
如果字符串中存在任何数组/列表,我想从字符串中删除数组/列表的所有项目。这样函数应该返回一个字符串
str = "This is a erpillar and that is a ger." (cat and dog removed from the string)
我可以做这样的事情private String removeElementsFromString (String str, String [] elements) {
if(Arrays.stream(elements).anyMatch(str::contains)){
for(String item : elements){
str = str.replace(item, "");
}
}
return str;
}
但是将 for 循环更改为其他内容的优雅方式是什么。
最佳答案
单线解决方案
以下单行程序完成了这项工作:
str = str.replaceAll(Arrays.stream(elements).map(s -> "(?:" + s + ")").collect(Collectors.joining("|")), "");
演示: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);
}
}
输出:This is a erpillar and that is a ger.
ONLINE DEMO说明:
Arrays.stream(elements).map(s -> "(?:" + s + ")").collect(Collectors.joining("|"))
结果进入正则表达式,(?:cat)|(?:dog)|(?:fish)
其中means cat
或 dog
或 fish
.下一步是用
""
替换这个生成的正则表达式.
关于java - 从字符串中删除列表或数组的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69586817/