contains()最常用但不支持null,需提前判空;indexof()可获取位置信息,对空串返回0;正则匹配需转义元字符;stringutils.contains()是null安全替代方案。
contains() 方法最常用,但要注意 null 安全
contains() 是判断子串存在的首选,它调用 indexOf() 内部实现,语义清晰、可读性强。但它不接受 null 参数——传入 null 会直接抛出 NullPointerException。
常见错误现象:str.contains(null) 或 str.contains(subStr) 中 subStr 未判空就调用。
- 使用前务必检查子串是否为
null,例如:subStr != null && str.contains(subStr) - 若需忽略大小写,不能直接用
contains(),得转成统一大小写再比较,如str.toLowerCase().contains(subStr.toLowerCase()) - 该方法区分 Unicode 码点,对代理对(surrogate pairs)支持正常,无需额外处理
indexOf() 返回值判断更底层,适合需要位置信息的场景
当不只是“有没有”,还需要“在哪儿”时,indexOf() 更合适。它返回首次匹配的索引,没找到则返回 -1,比布尔值多一层信息。
容易踩的坑:indexOf() 对空字符串 "" 总是返回 0,哪怕原字符串是 null(此时会 NPE)或空串本身。
立即学习“Java免费学习笔记(深入)”;