Java字符串查找替换常用contains、indexOf和replace方法,支持简单匹配与正则操作,注意字符串不可变性及性能优化。

在Java开发中,字符串操作是日常编码中最常见的任务之一。查找与替换字符串内容不仅用于文本处理,还广泛应用于数据清洗、日志分析、模板填充等场景。Java的String类提供了多个内置方法来高效完成这些操作,无需依赖外部库。
使用 indexOf 和 contains 查找字符串
要判断某个子串是否存在于字符串中,可以使用 contains() 方法,它返回一个布尔值,使用简单直观。
示例:String text = "Hello, welcome to Java programming!";
boolean found = text.contains("Java"); // 返回 true
如果需要知道子串的具体位置,应使用 indexOf() 方法。它返回第一次出现的索引,未找到则返回 -1。
示例:int index = text.indexOf("welcome"); // 返回 7
int lastIndex = text.lastIndexOf("o"); // 返回最后一次出现的位置
这两个方法适合做条件判断或定位操作,是查找操作的基础。
立即学习“Java免费学习笔记(深入)”;
使用 replace 进行简单替换
Java 提供了多个 replace 相关方法,用于替换字符串中的字符或子串。
- replace(char oldChar, char newChar):替换所有指定字符
- replace(CharSequence target, CharSequence replacement):替换所有匹配的子串
String s = "I love coding in Java";
s = s.replace("Java", "Python"); // 结果:"I love coding in Python"
s = s.replace('o', '0'); // 结果:"I l0ve c0ding in Pyth0n"
注意:String 是不可变对象,replace 操作不会修改原字符串,而是返回一个新的字符串。
使用正则表达式进行高级查找与替换
对于更复杂的匹配模式,比如替换所有数字、忽略大小写、匹配特定格式等,可以使用基于正则表达式的方法。
- matches(String regex):判断是否完全匹配正则表达式
- replaceAll(String regex, String replacement):替换所有符合正则的子串
- replaceFirst(String regex, String replacement):仅替换第一个匹配项
String log = "Error at line 123, code 456";
log = log.replaceAll("\\d+", "[NUM]"); // 将所有数字替换为 [NUM]
// 结果:"Error at line [NUM], code [NUM]"
String text = "HELLO world";
text = text.replaceFirst("(?i)hello", "Hi"); // (?i) 表示忽略大小写
// 结果:"Hi world"
正则表达式功能强大,但需注意性能开销,避免在高频调用中频繁编译复杂正则。
实用建议与注意事项
在实际使用中,有几个关键点需要注意:
- 始终记住字符串是不可变的,每次操作都会生成新对象,大量拼接或替换时建议使用 StringBuilder 配合操作
- 如果需要多次查找或替换,可预先编译 Pattern 对象以提升性能
- 使用 trim() 去除首尾空格后再查找,避免因空白字符导致匹配失败
- 对 null 字符串要提前判断,防止抛出 NullPointerException
基本上就这些。掌握这些字符串查找与替换技巧,能显著提升代码的可读性和处理效率。合理选择方法,结合业务场景,才能写出更稳健的Java代码。










