如何在 Java 中检查字符串是否包含特定子字符串

JavaJavaBeginner
立即练习

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

简介

在这个实验中,你将学习如何在 Java 中检查一个字符串是否包含特定的子字符串。我们将探讨完成这一常见任务的不同方法,首先是简单直接的 contains() 方法。你将学习如何使用 contains() 方法来判断一个字符串是否包含给定的字符序列,并在一个简单的 Java 程序中实践实现这一功能。

在介绍完 contains() 方法后,本实验将引导你使用 indexOf() 方法,该方法不仅可以检查子字符串是否存在,还能找出它在字符串中的位置。最后,你将学习执行不区分大小写的子字符串检查的技巧,确保你的代码能够处理大小写的变化。在本实验结束时,你将对 Java 中检查子字符串的各种方法有一个扎实的理解。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL java(("Java")) -.-> java/StringManipulationGroup(["String Manipulation"]) java(("Java")) -.-> java/SystemandDataProcessingGroup(["System and Data Processing"]) java/StringManipulationGroup -.-> java/strings("Strings") java/SystemandDataProcessingGroup -.-> java/string_methods("String Methods") subgraph Lab Skills java/strings -.-> lab-559979{{"如何在 Java 中检查字符串是否包含特定子字符串"}} java/string_methods -.-> lab-559979{{"如何在 Java 中检查字符串是否包含特定子字符串"}} end

使用 contains() 方法搜索子字符串

在这一步中,你将学习如何在 Java 中使用 contains() 方法来检查一个字符串是否包含特定的子字符串。这是编程中的一项常见任务,例如在句子中搜索关键词,或者检查文件名是否包含特定的扩展名。

contains() 方法是 Java 中 String 类的一部分。如果字符串包含指定的字符序列,该方法将返回 true;否则返回 false

让我们创建一个新的 Java 文件来练习使用 contains() 方法。

  1. 打开 WebIDE 左侧的文件资源管理器。

  2. 确保你位于 ~/project 目录下。

  3. 在空白处右键单击,选择“新建文件”。

  4. 将新文件命名为 StringContains.java

  5. 在编辑器中打开 StringContains.java 文件。

  6. 将以下代码复制并粘贴到编辑器中:

    public class StringContains {
        public static void main(String[] args) {
            String sentence = "Java programming is fun and powerful.";
            String keyword = "programming";
    
            // Check if the sentence contains the keyword
            boolean containsKeyword = sentence.contains(keyword);
    
            System.out.println("Sentence: \"" + sentence + "\"");
            System.out.println("Keyword: \"" + keyword + "\"");
            System.out.println("Does the sentence contain the keyword? " + containsKeyword);
    
            String anotherKeyword = "Python";
            boolean containsAnotherKeyword = sentence.contains(anotherKeyword);
    
            System.out.println("\nAnother keyword: \"" + anotherKeyword + "\"");
            System.out.println("Does the sentence contain the another keyword? " + containsAnotherKeyword);
        }
    }

    在这段代码中:

    • 我们声明了一个 String 类型的变量 sentence 和一个 String 类型的变量 keyword
    • 我们使用 sentence.contains(keyword) 来检查 sentence 是否包含 keyword 中的字符序列。检查结果存储在一个 boolean 类型的变量 containsKeyword 中。
    • 我们打印出原始句子、关键词以及 contains() 方法的检查结果。
    • 我们使用另一个关键词 "Python" 重复上述过程,以查看当未找到子字符串时的结果。
  7. 保存文件(Ctrl+S 或 Cmd+S)。

  8. 打开 WebIDE 底部的终端。

  9. 使用以下命令确保你位于 ~/project 目录下:

    cd ~/project
  10. 使用 javac 命令编译 Java 程序:

    javac StringContains.java

    如果没有错误,你将不会看到任何输出。~/project 目录下将创建一个 StringContains.class 文件。

  11. 使用 java 命令运行编译后的 Java 程序:

    java StringContains

    你应该会看到类似于以下的输出:

    Sentence: "Java programming is fun and powerful."
    Keyword: "programming"
    Does the sentence contain the keyword? true
    
    Another keyword: "Python"
    Does the sentence contain the another keyword? false

这个输出表明,contains() 方法正确识别出句子中包含 "programming",但不包含 "Python"。

探索使用 indexOf() 方法查找子字符串的位置

在上一步中,你学习了如何使用 contains() 方法检查字符串是否包含子字符串。现在,让我们来探索另一个有用的方法 indexOf(),它不仅能告诉你子字符串是否存在,还能给出它在字符串中的起始位置。

Java 的 String 类中的 indexOf() 方法会返回指定子字符串在该字符串中首次出现的索引。这个索引是子字符串第一个字符的位置。请记住,在编程中,索引通常从 0 开始。如果未找到子字符串,indexOf() 方法将返回 -1。

让我们修改之前的 Java 文件 StringContains.java,以使用 indexOf() 方法。

  1. 在 WebIDE 编辑器中打开 StringContains.java 文件。

  2. 将文件的全部内容替换为以下代码:

    public class StringContains {
        public static void main(String[] args) {
            String sentence = "Java programming is fun and powerful.";
            String keyword = "programming";
    
            // Find the index of the keyword
            int index = sentence.indexOf(keyword);
    
            System.out.println("Sentence: \"" + sentence + "\"");
            System.out.println("Keyword: \"" + keyword + "\"");
    
            if (index != -1) {
                System.out.println("The keyword \"" + keyword + "\" was found at index: " + index);
            } else {
                System.out.println("The keyword \"" + keyword + "\" was not found.");
            }
    
            String anotherKeyword = "Python";
            int anotherIndex = sentence.indexOf(anotherKeyword);
    
            System.out.println("\nAnother keyword: \"" + anotherKeyword + "\"");
    
            if (anotherIndex != -1) {
                System.out.println("The keyword \"" + anotherKeyword + "\" was found at index: " + anotherIndex);
            } else {
                System.out.println("The keyword \"" + anotherKeyword + "\" was not found.");
            }
        }
    }

    在这段更新后的代码中:

    • 我们使用 sentence.indexOf(keyword) 来查找 keywordsentence 中的起始索引。结果存储在一个 int 类型的变量 index 中。
    • 我们使用 if 语句检查返回的 index 是否为 -1。如果不是 -1,则表示找到了关键词,我们将打印出它的索引;否则,我们将打印一条消息,表明未找到该关键词。
    • 我们对 "Python" 重复上述过程,以演示子字符串不存在的情况。
  3. 保存文件(Ctrl+S 或 Cmd+S)。

  4. 打开 WebIDE 底部的终端。

  5. 确保你位于 ~/project 目录下。

  6. 编译修改后的 Java 程序:

    javac StringContains.java
  7. 运行编译后的 Java 程序:

    java StringContains

    你应该会看到类似于以下的输出:

    Sentence: "Java programming is fun and powerful."
    Keyword: "programming"
    The keyword "programming" was found at index: 5
    
    Another keyword: "Python"
    The keyword "Python" was not found.

输出结果显示,"programming" 在句子中的起始索引为 5(记住,'J' 的索引为 0,'a' 的索引为 1,依此类推,包括空格)。它还正确表明未找到 "Python"。

使用 indexOf() 方法不仅可以检查子字符串是否存在,还能确定其确切位置,这在各种字符串处理任务中非常有用。

实现不区分大小写的子字符串检查

在前面的步骤中,你使用了 contains()indexOf() 方法来搜索子字符串。然而,这些方法是区分大小写的。这意味着 "Java" 会被视为与 "java" 或 "JAVA" 不同。在许多情况下,你可能希望进行不区分大小写的搜索。

Java 的 String 类没有像 containsIgnoreCase()indexOfIgnoreCase() 这样的内置方法。不过,你可以在搜索之前将原始字符串和子字符串都转换为相同的大小写(小写或大写),从而实现不区分大小写的搜索。最常见的做法是使用 toLowerCase() 方法将两者都转换为小写。

让我们再次修改 StringContains.java 文件,以进行不区分大小写的搜索。

  1. 在 WebIDE 编辑器中打开 StringContains.java 文件。

  2. 将文件的全部内容替换为以下代码:

    public class StringContains {
        public static void main(String[] args) {
            String sentence = "Java programming is fun and powerful.";
            String keyword = "JAVA"; // Using uppercase for demonstration
    
            // Convert both strings to lowercase for case-insensitive comparison
            String lowerSentence = sentence.toLowerCase();
            String lowerKeyword = keyword.toLowerCase();
    
            // Use contains() on the lowercase strings
            boolean containsKeyword = lowerSentence.contains(lowerKeyword);
    
            System.out.println("Original Sentence: \"" + sentence + "\"");
            System.out.println("Original Keyword: \"" + keyword + "\"");
            System.out.println("Does the sentence contain the keyword (case-insensitive)? " + containsKeyword);
    
            // You can also use indexOf() in a case-insensitive way
            int index = lowerSentence.indexOf(lowerKeyword);
    
            if (index != -1) {
                System.out.println("The keyword \"" + keyword + "\" was found at index (case-insensitive): " + index);
            } else {
                System.out.println("The keyword \"" + keyword + "\" was not found (case-insensitive).");
            }
        }
    }

    在这段代码中:

    • 我们将 keyword 定义为 "JAVA"(大写)。
    • 我们使用 toLowerCase() 方法将原始字符串转换为小写,创建了新的字符串 lowerSentencelowerKeyword
    • 然后,我们对小写字符串使用 contains() 方法进行不区分大小写的检查。
    • 我们还演示了如何通过对小写字符串使用 indexOf() 方法来实现不区分大小写的搜索。
  3. 保存文件(Ctrl+S 或 Cmd+S)。

  4. 打开 WebIDE 底部的终端。

  5. 确保你位于 ~/project 目录下。

  6. 编译修改后的 Java 程序:

    javac StringContains.java
  7. 运行编译后的 Java 程序:

    java StringContains

    你应该会看到类似于以下的输出:

    Original Sentence: "Java programming is fun and powerful."
    Original Keyword: "JAVA"
    Does the sentence contain the keyword (case-insensitive)? true
    The keyword "JAVA" was found at index (case-insensitive): 0

这个输出表明,即使原始关键词是 "JAVA"(大写),不区分大小写的搜索也能正确地在句子中找到它,并报告其索引(在小写的 "Java" 中索引为 0)。

通过在搜索前将字符串转换为一致的大小写,你可以轻松地在 Java 中进行不区分大小写的子字符串检查。

总结

在本次实验中,你学习了如何在 Java 中检查字符串是否包含特定的子字符串。首先,你使用了 contains() 方法,它能简单地以布尔值形式检查子字符串是否存在。这个方法简单直接,适用于基本的子字符串存在性检查。

接着,你探索了 indexOf() 方法,它不仅能检查子字符串是否存在,还能返回其首次出现的起始索引。这有助于更详细地分析子字符串在字符串中的位置。最后,你解决了进行不区分大小写的子字符串检查这一常见需求,并展示了无论原始字符串大小写如何都能实现该检查的技巧。