Java 程序检查字符串中是否包含两个单词

2025 年 1 月 6 日 | 阅读 6 分钟

在软件开发领域,文本处理是一项常见的任务。无论我们是在构建搜索引擎、聊天机器人,还是任何处理文本的应用程序,我们都可能需要确定某些单词是否存在于字符串中。在本节中,我们将讨论如何检查字符串中是否存在两个特定的单词

Java 通过 String 类提供了丰富的字符串操作方法。在深入探讨检查两个单词的具体方法之前,了解一些基本的字符串操作至关重要。

以下是一些常用的字符串操作方法

  • length(): 返回字符串的长度。
  • charAt(int index): 返回指定索引处的字符。
  • substring(int beginIndex, int endIndex): 返回给定字符串的一个子字符串。
  • indexOf(String str): 返回指定子字符串第一次出现的索引。
  • contains(CharSequence s): 如果字符串包含指定的字符序列,则返回 true。

在字符串中检查单词

要检查字符串中是否存在两个特定的单词,我们可以根据需求的复杂性采用各种方法。我们将探讨几种方法,从基本到更高级的技术。

基本方法:使用 contains() 方法

检查字符串中是否存在两个单词的最简单方法是使用 contains() 方法。此方法检查字符序列是否存在于字符串中。

文件名:WordChecker.java

输出

Are both words present? true

在此示例中,如果字符串 str 中同时找到word1word2,则 areWordsPresent() 方法返回 true。

不区分大小写的搜索

默认情况下,Java 中的字符串是区分大小写的。要执行不区分大小写的搜索,我们可以在检查之前将字符串和单词都转换为小写或大写。

文件名:CaseInsensitiveWordChecker.java

输出

Are both words present (case-insensitive)? True

检查整个单词

contains() 方法会检查字符序列,而该序列可能是另一个单词的一部分。为了确保我们检查的是整个单词,我们可以使用正则表达式。

文件名:WholeWordChecker.java

输出

Are both whole words present? true

在此示例中,\\b 是正则表达式中的单词边界,可确保 word1 和 word2 作为整个单词进行匹配。

使用正则表达式处理单词变体

正则表达式还可以处理单词的变体,例如不同的时态或复数形式。例如,要同时检查“quick”和“quickly”,可以使用像 quick(ly)? 这样的模式。

文件名:WordVariationChecker.java

输出

Are both word variations present? true

在此示例中,word1Patternword2Pattern使用正则表达式模式来匹配quicklazy的变体。quick(ly)?模式匹配quickquickly,而laz(y|ies)?模式匹配lazylazies

高级方法

对于更复杂的场景,例如在大量文本中或在标点符号存在的情况下检查单词,可以应用其他策略。

使用字符串分词

字符串分词涉及将字符串拆分为单个单词,然后检查结果数组中是否存在所需的单词。当处理标点符号和其他分隔符时,这非常有用。

文件名:TokenizationChecker.java

输出

Are both words present using tokenization? true

使用 Set 进行更快的查找

如果我们需要检查非常大的字符串中是否存在单词,将字符串转换为单词集可以使查找更快。

文件名:SetChecker.java

输出

Are both words present using a set? true

使用 Stream API 进行现代 Java

Java 8 引入了 Stream API,可用于以函数式风格处理元素序列。以下是我们如何利用它来检查单词是否存在

文件名:StreamChecker.java

输出

Are both words present using Stream API? true 

在 Java 中,可以通过各种方法在字符串中检查两个单词的存在,从基本到高级技术。contains() 等简单方法对于简单情况可能就足够了,而更复杂的场景可能需要正则表达式、分词或利用 Apache Commons Lang 等库。

通过了解这些不同的方法,我们可以根据具体的需要和限制选择最合适的方法。无论我们处理的是大小写敏感性、整个单词匹配还是大规模文本处理,Java 都提供了高效处理这些任务的工具和灵活性。

方法比较

使用 contains() 的基本方法

  • 直接检查子字符串是否存在。
  • 适用于简单情况。

不区分大小写的搜索

  • 将字符串和单词都转换为小写或大写。
  • 确保大小写差异不会影响搜索。

使用正则表达式检查整个单词

  • 在正则表达式中使用单词边界标记(\\b)。
  • 确保只匹配整个单词。

使用正则表达式处理单词变体

  • 使用更复杂的模式来匹配单词的变体。
  • 适用于检查不同的时态、复数形式等。

字符串分词

  • 将字符串拆分为标记并检查单词的存在。
  • 有效处理标点符号和其他分隔符。

使用 Set 进行更快的查找

  • 将字符串转换为单词集。
  • 为大型文本提供更快的查找时间。

使用 Apache Commons Lang

  • 利用 StringUtils 实现更简洁易读的代码。
  • 以最少的代码提供不区分大小写的搜索。

使用 Stream API 进行现代 Java

  • 利用 Java 8 Stream API 进行函数式风格处理。
  • 高效简洁地处理元素序列。