测试字符串是否包含数组中的任何字符串

2022-08-31 06:39:42

如何测试字符串以查看它是否包含数组中的任何字符串?

而不是使用

if (string.contains(item1) || string.contains(item2) || string.contains(item3))

答案 1

编辑:这是使用Java 8流API的更新。更干净。仍然可以与正则表达式结合使用。

public static boolean stringContainsItemFromList(String inputStr, String[] items) {
    return Arrays.stream(items).anyMatch(inputStr::contains);
}

此外,如果我们将输入类型更改为List而不是数组,则可以使用。items.stream().anyMatch(inputStr::contains)

如果您希望返回匹配的字符串,也可以使用。.filter(inputStr::contains).findAny()

重要提示:上述代码可以使用,但大多数情况下,这实际上会妨碍性能。有关并行流式处理的更多详细信息,请参阅此问题parallelStream()


原始略带日期的答案:

这是一个(非常基本的)静态方法。请注意,它对比较字符串区分大小写。使其不区分大小写的一种原始方法是调用或同时调用输入字符串和测试字符串。toLowerCase()toUpperCase()

如果你需要做任何比这更复杂的事情,我建议你看看PatternMatcher类,并学习如何做一些正则表达式。一旦你理解了这些,你就可以使用这些类或帮助器方法。String.matches()

public static boolean stringContainsItemFromList(String inputStr, String[] items)
{
    for(int i =0; i < items.length; i++)
    {
        if(inputStr.contains(items[i]))
        {
            return true;
        }
    }
    return false;
}

答案 2
import org.apache.commons.lang.StringUtils;

字符串实用程序

用:

StringUtils.indexOfAny(inputString, new String[]{item1, item2, item3})

它将返回找到的字符串的索引,如果未找到,则返回 -1。