Java String.contains() 方法

2025 年 8 月 18 日 | 阅读 7 分钟

在 Java 中,String.contains() 方法在给定字符串中搜索字符序列。如果在此字符串中找到字符值序列,则返回 true,否则返回 false。

Java String.contains() 方法

String.contains() 方法用于确定一个字符串是否包含另一个字符串。它返回一个布尔值:如果字符串包含指定的字符序列,则返回 true;否则返回 false。String.contains() 方法的签名如下所示

参数

sequence:指定要搜索的字符序列。

返回:true 如果字符值序列存在,否则返回 false

异常:如果序列为 null,该方法将抛出 NullPointerException。

内部实现

在这里,CharSequence 会转换为 String。之后,会调用 String.indexOf() 方法。如果找到搜索的字符串,String.indexOf() 方法会返回 0 或大于 0 的数字。

但是,如果未找到搜索的字符串,String.indexOf() 方法会返回 -1。因此,执行后,当 String.indexOf() 方法返回非负值(找到搜索的字符串时)时,String.contains() 方法返回 true;否则,该方法返回 false。

大小写敏感性

默认情况下,String.contains() 方法区分大小写。这意味着大写和小写字母被区别对待。例如

要执行不区分大小写的搜索,我们可以使用 toLowerCase() 或 toUpperCase() 等方法将源字符串和搜索字符串都转换为相同的大小写

示例-1:String.contains() 方法

示例

编译并运行

输出

true
true
false

示例-2:String.contains() 方法

String.contains() 方法搜索区分大小写的字符序列。如果参数不区分大小写,则返回 false。让我们看一个示例。

示例

编译并运行

输出

true
false

示例-3:String.contains() 方法

String.contains() 方法有助于在字符串中查找字符序列。我们可以在控制结构中使用它来生成基于搜索的结果。让我们看一个示例。

示例

编译并运行

输出

This string contains TpointTech.com

示例-4:String.contains() 方法

当在方法的参数中传入 null 时,String.contains() 方法会引发 NullPointerException。以下示例显示了这一点。

示例

编译并运行

输出

Exception in thread "main" java.lang.NullPointerException: Cannot invoke "java.lang.CharSequence.toString()" because "s" is null
	at java.base/java.lang.String.contains(String.java:2981)
	at Main.main(Main.java:7)

String.contains() 与 String.indexOf()

在大多数编程语言中,contains() 成为直接检查的决定,而 indexOf() 可用于更复杂的实现。

String.contains() 方法

它只会检查子字符串是否存在,并告诉我们 true 或 false。它对于执行标志非常有用。它的实现逻辑几乎与 indexOf() 相同。

String.indexOf() 方法

它返回一个整数值。其逻辑源自对字符串中子字符串的搜索。成功搜索后,它返回第一次出现的起始索引。否则,它返回 -1。

示例

编译并运行

输出

Is 'World' present? true
Is 'World' present (using index)? true
The index of 'World' is: 6

用例

String.contains() 方法在各种场景中都有应用,包括

  • 搜索操作:它通常用于在较大的字符串中搜索特定的子字符串,例如解析用户输入或在文本中搜索关键字。
  • 过滤数据:在处理字符串集合时,String.contains() 可以帮助根据特定条件过滤元素。
  • 输入验证:在用户输入验证中,可以使用 String.contains() 来确保某些子字符串存在或不存在。

String.contains() 方法的局限性

以下是 String.contains() 方法的一些局限性

  • String.contains() 方法不应用于在字符串中搜索字符。这样做会导致错误。
  • String.contains() 方法只检查一个字符串中是否存在另一个字符串。它从不揭示找到搜索索引的索引。由于这些限制,最好使用 indexOf() 方法而不是 String.contains() 方法。

优点

  • 可读性:代码易于阅读和理解,这是一个优点。MyString.contains("text") 直截了当,并完全按照读者预期执行。
  • 简洁性:它是一个单一、优雅的方法调用。简单的检查,例如给定子字符串是否存在于字符串中,不需要编写循环结构或使用复杂的正则表达式。
  • 内置:允许字符串类的规定,无需导入其他包。它是标准 Java 库的一部分。因此,它随处可用,不需要额外导入。

缺点

  • 区分大小写:这可能是最大的缺点。在依赖于不处理变体的代码场景中可能会被遗忘,这会使代码的其余部分无法正常工作。
  • 不支持正则表达式:它仅用于搜索指定的字符序列。“任意数字后跟一个空格”很复杂,需要使用 Java 的正则表达式类。
  • 空安全:如果系统不应因空指针异常而崩溃,请勿将 null 作为参数传递。搜索字符串 null 不应为 null,但确保这一点是程序员的工作。

要记住的重要事项

  1. 区分大小写:它区分大小写检查字符串。永远记住“Messages”与“messages”不同。
  2. 返回类型:返回布尔值 (true/false),这使得该方法简单且在 if/else 检查中很有用。
  3. 搜索结果:验证特定子字符串是否存在,但不提供其位置。
  4. 错误处理:建议执行空检查,因为 null 参数将抛出 NullPointerException。

结论

String.contains() 方法提供了一种方便的方式来在字符串中执行子字符串搜索。通过理解其功能、细微差别和最佳实践,您可以在 Java 应用程序中有效地利用它。无论是解析文本、验证输入还是过滤数据,String.contains() 都被证明是您编程中的宝贵工具。

Java String.contains() 方法 MCQ

1. String.contains() 方法返回一个 _______ 值。

  1. String
  2. int
  3. boolean
  4. void
 

答案:c)

解释:该方法旨在回答一个简单的“是/否”问题:“此字符串是否包含此序列?”答案只能以 Java 中的布尔值形式给出,这使得布尔数据类型成为唯一合适的答案。


2. contains() 方法执行 _______ 搜索,这意味着如果您搜索“apple”,它将对“Apple”返回 false。

  1. 不区分大小写
  2. 区分大小写
  3. regex
  4. 部分
 

答案:b)

解释:String.contains() 不是部分匹配搜索。字符串必须完全匹配,逐个字符,并区分每个字符的大小写。如果您想不区分大小写地搜索,则必须在检查之前将其中一个字符串更改为相同的大小写,例如 mainString.toLowerCase().contains(searchString.toLowerCase())。


3. 当您只需要知道子字符串是否 ________,而不是它的位置时,contains() 方法最有用。

  1. long
  2. short
  3. 出席
  4. unique
 

答案:c)

解释:如果您需要索引,则应改用 indexOf() 方法。


4. 为了验证字符串是否包含某些字符集而不区分大小写,程序员在使用 _______ 之前可以将字符串更改为 toLowerCase() 或 toUpperCase()。

  1. equals()
  2. matches()
  3. indexOf()
  4. contains()
 

答案:d)

解释:使用 contains() 函数执行不区分大小写检查的最简单、最有效的方法是使用小写或大写将字符串和要搜索的术语更改为相同的大小写。


5. String.contains() 最重要的局限性是它不支持 _______。

  1. 空值
  2. 正则表达式
  3. 空字符串
  4. 多线程
 

答案:b)

解释:contains() 方法不是为处理复杂查询而构建的,这就是它无法搜索数字后出现的字母的原因。对于此类复杂的查询,程序员将不得不使用 java.util.regex 包中的 Pattern 和 Matcher 类,或者使用 String.matches() 方法。