一、方法定义

public boolean contains(CharSequence chars)
  • 所属类java.lang.String
  • 功能:判断字符串是否包含指定的字符序列(CharSequence)。
  • 参数
    • chars:要搜索的字符序列(可以是StringStringBuilder等实现CharSequence接口的对象)。
  • 返回值boolean,如果包含则返回true,否则返回false
  • 异常
    • 抛出NullPointerException,如果调用contains()的字符串为null
    • 抛出IllegalArgumentException,如果chars参数为null

二、功能说明

  1. 字符序列匹配
    • 判断当前字符串是否包含指定的字符序列(子串)。
    • 例如:"Hello World".contains("World")返回true
  2. 区分大小写
    • 匹配是区分大小写的。"Java".contains("java")返回false
  3. 空字符串处理
    • 任何字符串都包含空字符串(""),因此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

四、使用技巧

  1. 快速判断子串是否存在

    if (str.contains("error")) {
        System.out.println("检测到错误信息");
    }
    
  2. 结合indexOf()定位子串位置

    int index = str.indexOf("Java");
    if (index != -1) {
        System.out.println("子串'Java'位于索引: " + index);
    }
    
  3. 处理大小写不敏感的场景

    boolean containsCaseInsensitive = str.toLowerCase().contains("java");
    
  4. 验证字符串格式

    if (email.contains("@") && email.contains(".")) {
        System.out.println("邮箱格式初步有效");
    }
    

五、常见错误

  1. 未检查null导致异常

    String str = null;
    if (str.contains("test")) { ... } // 抛出 NullPointerException
    
  2. 参数为null

    String str = "Java";
    if (str.contains(null)) { ... } // 抛出 IllegalArgumentException
    
  3. 误判空字符串

    String str = "";
    if (str.contains("test")) { ... } // 返回 false
    

六、注意事项

  1. 空字符串处理
    • str.contains("")始终返回true,需根据业务逻辑处理。
  2. 大小写敏感性
    • 区分大小写,需结合toLowerCase()/toUpperCase()处理不敏感场景。
  3. 性能考量
    • contains()内部调用indexOf(),时间复杂度为O(n),适合简单判断。
  4. 多语言支持
    • 支持Unicode字符,但需确保编码一致(如UTF-8)。

七、最佳实践

  1. 安全调用contains()

    • 使用工具类(如Apache Commons Lang的StringUtils)避免空指针:
      if (StringUtils.isNotEmpty(str) && str.contains("Java")) { ... }
      
  2. 结合trim()去除空格

    if (str.trim().contains("Java")) { ... }
    
  3. 处理大小写不敏感的场景

    boolean contains = str.toLowerCase().contains("java");
    
  4. 避免重复调用contains()

    • 若需多次判断,可先转换为小写并缓存结果:
      String lowerStr = str.toLowerCase();
      if (lowerStr.contains("java") || lowerStr.contains("script")) { ... }
      

八、性能优化

场景 优化建议
高频调用 缓存转换后的字符串(如toLowerCase()结果)。
多条件匹配 使用正则表达式matches()Pattern类。
大数据量处理 使用indexOf()替代contains()(两者内部实现类似,但indexOf()更灵活)。

九、总结

  1. 核心功能contains()用于判断字符串是否包含指定字符序列,是区分大小写的。
  2. 关键实践
    • 调用前检查null和参数合法性。
    • 使用toLowerCase()处理大小写不敏感场景。
    • 避免误判空字符串和特殊字符。
  3. 性能保障:方法简单高效,适合大多数场景,但需注意异常处理和编码一致性。