java字符串截取与替换主要依靠string类方法:substring()按位置截取(左闭右开),indexof()+substring()按内容定位截取;replace()字面量替换,replaceall()/replacefirst()基于正则替换;复杂逻辑用pattern+matcher动态处理。

Java 中截取和替换字符串中的指定子串,主要靠 String 类提供的内置方法,无需额外依赖。核心操作有两类:按位置或按内容截取、按内容替换。关键在于理解方法的行为边界(比如是否包含起始/结束索引、是否区分大小写、是否全局替换)。
按位置截取子串:substring()
substring() 是最常用的截取方法,有两种重载形式:
-
substring(int beginIndex):从beginIndex开始到字符串末尾(含该索引位置的字符) -
substring(int beginIndex, int endIndex):从beginIndex(含)到endIndex(不含),即左闭右开区间
注意:beginIndex 必须 ≥ 0,endIndex 不能超过字符串长度,否则抛 StringIndexOutOfBoundsException。例如:
String s = "HelloWorld"; String sub1 = s.substring(5); // "World" String sub2 = s.substring(0, 5); // "Hello"
按内容截取:indexOf() + substring() 配合使用
若不知道具体位置,但知道要从某个关键词后/前截取,可先用 indexOf() 或 lastIndexOf() 找位置,再用 substring() 截取。例如提取 URL 中的域名:
String url = "https://www.example.com/path";
int start = url.indexOf("://") + 3; // 跳过 "://"
int end = url.indexOf('/', start); // 找第一个 "/"
String domain = (end == -1) ? url.substring(start) : url.substring(start, end); // "www.example.com"
建议检查 indexOf() 返回值是否为 -1,避免越界异常。
简单替换:replace()、replaceAll()、replaceFirst()
替换操作根据匹配方式分为三类:
-
replace(CharSequence old, CharSequence new):字面量替换,不走正则,支持任意字符序列(包括空串),全部替换 -
replaceAll(String regex, String replacement):基于正则表达式,全局替换(如"a+".replaceAll("a", "x")→"xxx") -
replaceFirst(String regex, String replacement):只替换第一个匹配项
注意:如果只是替换固定字符串,优先用 replace(),更安全、更快;要用正则时才选 replaceAll()。特殊字符如 .、* 在正则中需转义。
进阶替换:用 StringBuilder 或正则分组做动态替换
当替换逻辑复杂(如把数字加 1、按条件变大小写),可结合 Pattern 和 Matcher 使用 appendReplacement():
String text = "age: 25, score: 87";
Pattern p = Pattern.compile("\d+");
Matcher m = p.matcher(text);
StringBuffer sb = new StringBuffer();
while (m.find()) {
int num = Integer.parseInt(m.group());
m.appendReplacement(sb, String.valueOf(num + 1));
}
m.appendTail(sb);
// 结果:"age: 26, score: 88"
或者用 String.replace(...) 配合 lambda(Java 11+)的 replaceAll 替代方案(需自行实现),但原生 API 仍以正则 Matcher 最灵活。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











