Java String contains() 方法(保姆级教程)

更新时间:

💡一则或许对你有用的小广告

欢迎加入小哈的星球 ,你将获得:专属的项目实战 / 1v1 提问 / Java 学习路线 / 学习打卡 / 每月赠书 / 社群讨论

  • 新项目:《从零手撸:仿小红书(微服务架构)》 正在持续爆肝中,基于 Spring Cloud Alibaba + Spring Boot 3.x + JDK 17...点击查看项目介绍 ;
  • 《从零手撸:前后端分离博客项目(全栈开发)》 2 期已完结,演示链接: http://116.62.199.48/ ;

截止目前, 星球 内专栏累计输出 82w+ 字,讲解图 3441+ 张,还在持续爆肝中.. 后续还会上新更多项目,目标是将 Java 领域典型的项目都整一波,如秒杀系统, 在线商城, IM 即时通讯,权限管理,Spring Cloud Alibaba 微服务等等,已有 2900+ 小伙伴加入学习 ,欢迎点击围观

在 Java 编程中,字符串(String)是使用频率极高的数据类型。无论是处理用户输入、解析配置文件,还是验证数据格式,我们都需要频繁地对字符串进行操作。而 Java String contains() 方法 是其中最基础且实用的功能之一,它能够快速判断一个字符串是否包含指定的子字符串或字符序列。对于编程初学者而言,掌握这一方法能显著提升代码效率和可读性;而中级开发者则可以通过深入理解其底层原理和常见误区,进一步优化代码逻辑。本文将从基础到进阶,结合案例与代码示例,全面解析这一方法的使用场景与核心要点。


基础用法:快速判断字符串是否包含子串

方法定义与语法

contains() 方法是 Java String 类中的一个实例方法,其语法格式如下:

boolean contains(CharSequence cs)  

此方法接收一个 CharSequence 类型的参数(如字符串、字符数组等),返回一个布尔值:若当前字符串包含该参数所表示的子字符串,则返回 true,否则返回 false

示例代码与输出

public class ContainsExample {  
    public static void main(String[] args) {  
        String text = "Hello, World!";  
        boolean result1 = text.contains("Hello");  
        boolean result2 = text.contains("world");  
        boolean result3 = text.contains("!");  
        System.out.println("包含 'Hello':" + result1); // 输出:true  
        System.out.println("包含 'world':" + result2); // 输出:false(区分大小写)  
        System.out.println("包含 '!':" + result3);    // 输出:true  
    }  
}  

通过上述代码可见,contains() 方法对大小写敏感,且能精准匹配单个字符或连续字符序列。


核心原理:如何高效判断包含关系

字符串的内部存储结构

Java 中的字符串(String)是不可变对象,其底层通过 char[] 数组存储字符序列。例如,字符串 "Java" 在内存中被表示为 { 'J', 'a', 'v', 'a' }。当调用 contains() 方法时,Java 会遍历目标字符串的字符数组,并尝试在其中找到与输入参数完全匹配的连续子序列。

查找逻辑的比喻

可以将字符串想象成一本打开的书,每个字符是书页上的文字。contains() 方法就像一位快速翻页的读者,逐行检查是否能找到目标关键词。若找到,则立即返回 true;若遍历完整个字符串仍未找到,则返回 false


进阶技巧:常见场景与扩展应用

场景一:验证数据格式

在表单验证或数据解析时,contains() 方法能快速判断字符串是否符合特定规则。例如,验证邮箱地址是否包含 @ 符号:

public static boolean isValidEmail(String email) {  
    return email.contains("@") && email.contains(".");  
}  

此方法会检查邮箱地址是否同时包含 @.,但需注意:此仅为简单示例,实际应用中需结合正则表达式实现更严格的验证。

场景二:过滤敏感词

在社交平台或评论系统中,常需过滤包含敏感词的内容。例如:

public static boolean isSensitiveContent(String content) {  
    List<String> sensitiveWords = Arrays.asList("违法", "违规");  
    for (String word : sensitiveWords) {  
        if (content.contains(word)) {  
            return true;  
        }  
    }  
    return false;  
}  

此代码遍历敏感词列表,若发现任意一个词存在于输入内容中,则返回 true

场景三:配置文件解析

在读取配置文件时,可通过 contains() 方法快速定位关键参数:

public static String getConfigValue(String configLine, String key) {  
    if (configLine.contains(key)) {  
        return configLine.split("=")[1];  
    }  
    return null;  
}  

例如,输入 port=8080,调用 getConfigValue(line, "port") 将返回 "8080"


常见误区与注意事项

误区一:忽略大小写问题

由于 contains() 方法区分大小写,若需不区分大小写判断,可先将字符串转换为统一格式:

// 正确写法(不区分大小写)  
public boolean containsIgnoreCase(String text, String target) {  
    return text.toLowerCase().contains(target.toLowerCase());  
}  

误区二:处理空值或空字符串

若传入的字符串为 null 或空字符串,需提前进行空值校验:

public boolean safeContains(String text, String target) {  
    if (text == null || text.isEmpty()) {  
        return false;  
    }  
    return text.contains(target);  
}  

误区三:与 equals() 方法混淆

contains() 判断的是“是否包含子串”,而 equals() 判断的是“是否完全相等”。例如:

"Hello".contains("He")   // true  
"Hello".equals("He")    // false  

性能优化与替代方案

方法性能分析

contains() 方法的时间复杂度为 O(n),其中 n 是目标字符串的长度。对于极长的字符串(如百万级字符),可考虑以下优化:

  1. 提前终止条件:若已知目标子串长度大于当前字符串,可直接返回 false
  2. 使用正则表达式:通过 Pattern 类的预编译功能加速匹配。

替代方案:indexOf() 方法

indexOf() 方法返回子串的起始索引(未找到则返回 -1),与 contains() 的关系如下:

text.contains(substring) == (text.indexOf(substring) != -1)  

contains() 的代码可读性更高,推荐优先使用。


实战案例:构建敏感词过滤器

需求描述

开发一个简单的敏感词过滤工具,输入文本后返回是否包含敏感词。

实现代码

import java.util.*;  

public class SensitiveFilter {  
    private List<String> sensitiveWords;  

    public SensitiveFilter(List<String> words) {  
        this.sensitiveWords = new ArrayList<>(words);  
    }  

    public boolean isSensitive(String text) {  
        if (text == null || text.isEmpty()) {  
            return false;  
        }  
        for (String word : sensitiveWords) {  
            if (text.contains(word)) {  
                return true;  
            }  
        }  
        return false;  
    }  

    public static void main(String[] args) {  
        List<String> words = Arrays.asList("敏感词1", "敏感词2");  
        SensitiveFilter filter = new SensitiveFilter(words);  
        System.out.println(filter.isSensitive("测试敏感词1")); // 输出:true  
    }  
}  

此代码通过遍历敏感词列表,结合 contains() 方法实现高效过滤。


结论

Java String contains() 方法 是字符串处理中的核心工具,其简洁的语法和直观的逻辑使其在各类场景中广泛应用。通过本文的学习,读者不仅能掌握其基础用法,还能理解其底层原理、常见误区及优化技巧。无论是验证数据格式、过滤敏感内容,还是解析配置文件,合理使用 contains() 方法都能显著提升代码效率与可维护性。建议读者在实际项目中多加实践,逐步积累经验,从而更灵活地应对复杂需求。

最新发布