java - 从字符串中删除列表或数组的元素

标签 java arrays string list

我有一个列表或一个字符串数组

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 catdogfish .
下一步是用 "" 替换这个生成的正则表达式.

关于java - 从字符串中删除列表或数组的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69586817/

相关文章:

java - jsp中通过scriptlet实现dd/MM/yyyy日期格式

c - for 循环运行太频繁

c - 反转c中字符串中的单词

java - 在多次调用的函数中对数组进行一次排序

python - 从 2 个不同 .csv 文件中找到的 2 个数组中减去元素

ios - 使用元组 Swift 3 在单个 switch-case 中实现多个间隔

java - java中的键到值/值到键

java - 如何检索 Java Web 应用程序的更改列表?

java - 是否应该允许 GET 请求触发异常?

java - 如何将数组类型 InetAddress 转换为 String[]?