检查句子是不是包含某些单词

Posted

技术标签:

【中文标题】检查句子是不是包含某些单词【英文标题】:Check whether sentence contains certain words检查句子是否包含某些单词 【发布时间】:2020-07-06 03:55:21 【问题描述】:

我有这样一句话:

I`ve got a Pc

还有一组词:

Hello
world
Pc
dog

如何检查句子中是否包含这些单词?在此示例中,我将匹配 Pc

这是我目前得到的:

public class SentenceWordExample 
    public static void main(String[] args) 
        String sentence = "I`ve got a Pc";
        String[] words =  "Hello", "world", "Pc", "dog" ;

       // I know this does not work, but how to continue from here?
       if (line.contains(words) 
            System.out.println("Match!");
        else 
            System.out.println("No match!");
        
    

【问题讨论】:

您只需迭代数组中的所有元素并使用line.contains(arrayElement)。如果有任何匹配项,您就有匹配项。 【参考方案1】:

我会流式传输数组,然后检查字符串是否包含它的任何元素:

if (Arrays.stream(stringArray).anyMatch(s -> line.contains(s)) 
    // Do something...

【讨论】:

非常感谢!但我还有一个问题:变量 (s) 是一个字符串,对吧?因为我想要,我的代码从数组中返回包含的单词的位置。如果 s 是一个整数,那就很容易了【参考方案2】:

我更喜欢在此处使用正则表达式方法,但有交替:

String line = "I`ve got a Pc";
String[] array = new String[2];
array[0] = "Example sentence";
array[1] = "Pc";
List<String> terms = Arrays.asList(array).stream()
    .map(x -> Pattern.quote(x)).collect(Collectors.toList());
String regex = ".*\\b(?:" + String.join("|", terms) + ")\\b.*";
if (line.matches(regex)) 
    System.out.println("MATCH");

上述 sn-p 生成的确切正则表达式是:

.*\b(?:Example sentence|Pc)\b.*

也就是说,我们形成了一个替代项,其中包含我们要在输入字符串中搜索的所有关键字术语。然后,我们将该正则表达式与String#matches 一起使用。

【讨论】:

请注意,这仅适用于数组元素不包含元字符。如果需要,您可以使用Pattern::quote 转义它们。

以上是关于检查句子是不是包含某些单词的主要内容,如果未能解决你的问题,请参考以下文章

如何检查 URL 是不是包含某些单词?

检查字符串(句子空格分隔)以查看它是不是包含数组中的任何字符

正则表达式检查句子中仅包含字母的两个单词

jquery验证器避免句子中包含某些单词

用于检查字符串是不是不应包含某些单词的正则表达式,但如果这些单词前面有“to”或“for”,则这些单词是可以的

是否可以使用打字稿中的关键字类型检查句子是否包含某个单词?