一、方法定义
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()
处理大小写不敏感场景。 - 避免误判空字符串和特殊字符。
- 调用前检查
- 性能保障:方法简单高效,适合大多数场景,但需注意异常处理和编码一致性。