介绍
在这个实验中,你将学习如何在 Java 中检查一个字符串是否包含特定的子字符串。我们将探讨完成这一常见任务的不同方法,首先是简单直接的 contains() 方法。你将学习如何使用 contains() 方法来判断一个字符串是否包含给定的字符序列,并在一个简单的 Java 程序中实践实现这一功能。
在介绍完 contains() 方法后,本实验将引导你使用 indexOf() 方法,该方法不仅可以检查子字符串是否存在,还能找出它在字符串中的位置。最后,你将学习执行不区分大小写的子字符串检查的技巧,确保你的代码能够处理大小写的变化。在本实验结束时,你将对 Java 中检查子字符串的各种方法有一个扎实的理解。
使用 contains() 方法搜索子字符串
在这一步中,你将学习如何在 Java 中使用 contains() 方法来检查一个字符串是否包含特定的子字符串。这是编程中的一项常见任务,例如在句子中搜索关键词,或者检查文件名是否包含特定的扩展名。
contains() 方法是 Java 中 String 类的一部分。如果字符串包含指定的字符序列,该方法将返回 true;否则返回 false。
让我们创建一个新的 Java 文件来练习使用 contains() 方法。
打开 WebIDE 左侧的文件资源管理器。
确保你位于
~/project目录下。在空白处右键单击,选择“新建文件”。
将新文件命名为
StringContains.java。在编辑器中打开
StringContains.java文件。将以下代码复制并粘贴到编辑器中:
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" 重复上述过程,以查看当未找到子字符串时的结果。
- 我们声明了一个
保存文件(Ctrl+S 或 Cmd+S)。
打开 WebIDE 底部的终端。
使用以下命令确保你位于
~/project目录下:cd ~/project使用
javac命令编译 Java 程序:javac StringContains.java如果没有错误,你将不会看到任何输出。
~/project目录下将创建一个StringContains.class文件。使用
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() 方法。
在 WebIDE 编辑器中打开
StringContains.java文件。将文件的全部内容替换为以下代码:
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)来查找keyword在sentence中的起始索引。结果存储在一个int类型的变量index中。 - 我们使用
if语句检查返回的index是否为 -1。如果不是 -1,则表示找到了关键词,我们将打印出它的索引;否则,我们将打印一条消息,表明未找到该关键词。 - 我们对 "Python" 重复上述过程,以演示子字符串不存在的情况。
- 我们使用
保存文件(Ctrl+S 或 Cmd+S)。
打开 WebIDE 底部的终端。
确保你位于
~/project目录下。编译修改后的 Java 程序:
javac StringContains.java运行编译后的 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 文件,以进行不区分大小写的搜索。
在 WebIDE 编辑器中打开
StringContains.java文件。将文件的全部内容替换为以下代码:
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()方法将原始字符串转换为小写,创建了新的字符串lowerSentence和lowerKeyword。 - 然后,我们对小写字符串使用
contains()方法进行不区分大小写的检查。 - 我们还演示了如何通过对小写字符串使用
indexOf()方法来实现不区分大小写的搜索。
- 我们将
保存文件(Ctrl+S 或 Cmd+S)。
打开 WebIDE 底部的终端。
确保你位于
~/project目录下。编译修改后的 Java 程序:
javac StringContains.java运行编译后的 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() 方法,它不仅能检查子字符串是否存在,还能返回其首次出现的起始索引。这有助于更详细地分析子字符串在字符串中的位置。最后,你解决了进行不区分大小写的子字符串检查这一常见需求,并展示了无论原始字符串大小写如何都能实现该检查的技巧。



