答案:Java中字符串查找与替换主要通过String类方法和正则表达式实现。使用contains、indexOf进行查找;replace系列方法处理替换,其中replace适用于普通文本,replaceFirst和replaceAll支持正则;复杂场景可借助Pattern和Matcher提取或替换;注意String不可变性、正则转义及性能优化。

在Java中处理字符串查找和替换是日常开发中的常见任务。Java提供了多种方法来实现这些操作,主要依赖于String类本身的方法以及正则表达式的支持。下面介绍几种常用且实用的方式。
1. 使用 indexOf 和 contains 进行字符串查找
当你需要判断某个子字符串是否存在于原字符串中,或查找其位置时,可以使用以下方法:
- contains(CharSequence s):返回布尔值,判断是否包含指定字符序列。
- indexOf(String str):返回第一次出现的位置索引,未找到返回-1。
- lastIndexOf(String str):返回最后一次出现的位置索引。
String text = "Hello, welcome to Java programming!";
boolean hasJava = text.contains("Java"); // true
int pos = text.indexOf("welcome"); // 返回 7
int lastA = text.lastIndexOf('a'); // 返回最后一个 'a' 的位置
2. 使用 replace、replaceFirst 和 replaceAll 进行替换
根据替换需求的不同,可以选择不同的替换方法:
- replace(char oldChar, char newChar) 或 replace(CharSequence target, CharSequence replacement):替换所有匹配的字符或子串(不支持正则)。
- replaceFirst(String regex, String replacement):只替换第一个匹配正则表达式的部分。
- replaceAll(String regex, String replacement):替换所有匹配正则表达式的内容。
String sentence = "I love coding in Java. Java is great!";
String replaced = sentence.replace("Java", "Python");
// 结果:"I love coding in Python. Python is great!"
String withDigits = "Phone: 123-456-7890";
String masked = withDigits.replaceAll("\d", "*");
// 结果:"Phone: --****"
3. 使用 Pattern 和 Matcher 进行复杂查找与替换
对于更复杂的文本处理,比如需要提取匹配内容或进行条件替换,推荐使用java.util.regex.Pattern和Matcher类。
立即学习“Java免费学习笔记(深入)”;
- Pattern.compile 定义正则模式。
- Matcher 提供 find、group、replaceAll 等灵活操作。
String content = "Contact us at support@example.com or sales@company.org.";
Pattern emailPattern = Pattern.compile("\\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\.[A-Z|a-z]{2,}\\b");
Matcher matcher = emailPattern.matcher(content);
while (matcher.find()) {
System.out.println("Found: " + matcher.group());
}
// 输出两个邮箱地址
4. 注意事项与建议
处理字符串查找和替换时,有几个关键点需要注意:
- String 是不可变对象,所有操作都会返回新字符串,原字符串不变。
- 使用 replaceAll 和 replaceFirst 时,传入的是正则表达式,特殊字符如 . $ * 需要转义。
- 如果只是普通文本替换,优先使用 replace,避免正则带来的性能开销和转义问题。
- 大量重复操作建议使用 StringBuilder 配合手动遍历,提升性能。
基本上就这些。掌握这些方法后,大多数文本查找和替换场景都能应对。关键是根据实际需求选择合适的方法,注意性能和正确性。










