一、方法定义
public boolean contains(CharSequence chars)
- 所属类:
java.lang.String - 功能:判断字符串是否包含指定的字符序列(
CharSequence)。 - 参数:
chars:要搜索的字符序列(可以是String、StringBuilder等实现CharSequence接口的对象)。
- 返回值:
boolean,如果包含则返回true,否则返回false。 - 异常:
- 抛出
NullPointerException,如果调用contains()的字符串为null。 - 抛出
IllegalArgumentException,如果chars参数为null。
- 抛出
二、功能说明
- 字符序列匹配:
- 判断当前字符串是否包含指定的字符序列(子串)。
- 例如:
"Hello World".contains("World")返回true。
- 区分大小写:
- 匹配是区分大小写的。
"Java".contains("java")返回false。
- 匹配是区分大小写的。
- 空字符串处理:
- 任何字符串都包含空字符串(
""),因此str.contains("")始终返回true。
- 任何字符串都包含空字符串(
三、示例代码
1. 基础用法
String str = "Hello, World!";
boolean result1 = str.contains("Hello"); // true
boolean result2 = str.contains("world"); // false(区分大小写)
boolean result3 = str.contains(""); // true(空字符串)
System.out.println(result1); // 输出: true
System.out.println(result2); // 输出: false
System.out.println(result3); // 输出: true
2. 处理null的情况
String str = null;
boolean result = str.contains("test"); // 抛出 NullPointerException
String str2 = "Java";
boolean result2 = str2.contains(null); // 抛出 IllegalArgumentException
3. 结合其他方法使用
String str = "Java Programming";
boolean containsJava = str.contains("Java"); // true
boolean containsLang = str.contains("lang"); // false
// 不区分大小写的检查
boolean caseInsensitive = str.toLowerCase().contains("java"); // true
四、使用技巧
快速判断子串是否存在:
if (str.contains("error")) { System.out.println("检测到错误信息"); }结合
indexOf()定位子串位置:int index = str.indexOf("Java"); if (index != -1) { System.out.println("子串'Java'位于索引: " + index); }处理大小写不敏感的场景:
boolean containsCaseInsensitive = str.toLowerCase().contains("java");验证字符串格式:
if (email.contains("@") && email.contains(".")) { System.out.println("邮箱格式初步有效"); }
五、常见错误
未检查
null导致异常:String str = null; if (str.contains("test")) { ... } // 抛出 NullPointerException参数为
null:String str = "Java"; if (str.contains(null)) { ... } // 抛出 IllegalArgumentException误判空字符串:
String str = ""; if (str.contains("test")) { ... } // 返回 false
六、注意事项
- 空字符串处理:
str.contains("")始终返回true,需根据业务逻辑处理。
- 大小写敏感性:
- 区分大小写,需结合
toLowerCase()/toUpperCase()处理不敏感场景。
- 区分大小写,需结合
- 性能考量:
contains()内部调用indexOf(),时间复杂度为O(n),适合简单判断。
- 多语言支持:
- 支持Unicode字符,但需确保编码一致(如UTF-8)。
七、最佳实践
安全调用
contains():- 使用工具类(如Apache Commons Lang的
StringUtils)避免空指针:if (StringUtils.isNotEmpty(str) && str.contains("Java")) { ... }
- 使用工具类(如Apache Commons Lang的
结合
trim()去除空格:if (str.trim().contains("Java")) { ... }处理大小写不敏感的场景:
boolean contains = str.toLowerCase().contains("java");避免重复调用
contains():- 若需多次判断,可先转换为小写并缓存结果:
String lowerStr = str.toLowerCase(); if (lowerStr.contains("java") || lowerStr.contains("script")) { ... }
- 若需多次判断,可先转换为小写并缓存结果:
八、性能优化
| 场景 | 优化建议 |
|---|---|
| 高频调用 | 缓存转换后的字符串(如toLowerCase()结果)。 |
| 多条件匹配 | 使用正则表达式matches()或Pattern类。 |
| 大数据量处理 | 使用indexOf()替代contains()(两者内部实现类似,但indexOf()更灵活)。 |
九、总结
- 核心功能:
contains()用于判断字符串是否包含指定字符序列,是区分大小写的。 - 关键实践:
- 调用前检查
null和参数合法性。 - 使用
toLowerCase()处理大小写不敏感场景。 - 避免误判空字符串和特殊字符。
- 调用前检查
- 性能保障:方法简单高效,适合大多数场景,但需注意异常处理和编码一致性。