在Java编程中,字符串操作是最基础且频繁的任务之一,而字符串截取作为其中的核心功能,广泛应用于数据处理、文本解析、格式转换等场景,Java提供了多种字符串截取方式,涵盖从基础字符索引到复杂正则表达式的不同需求,开发者需根据场景特点选择合适的方法,本文将系统介绍Java字符串截取的主要技术,包括substring()方法、split()方法、正则表达式匹配以及第三方库工具,并通过实例解析其使用场景与注意事项。

基础截取:substring()方法的核心应用
substring()方法是Java字符串截取最常用的方式,位于String类中,支持基于字符索引的精确截取,其核心思想是通过起始索引和结束索引定位子串,索引从0开始,符合Java数组的一般规则。
substring()方法存在两种重载形式:
- 单参数形式:
substring(int beginIndex),从指定起始索引截取到字符串末尾。str = "HelloWorld",执行str.substring(5)将返回"World",索引5对应字符’W’。 - 双参数形式:
substring(int beginIndex, int endIndex),截取从起始索引到结束索引之前的子串(不包含结束索引字符)。str.substring(0, 5)将返回"Hello",注意结束索引5不参与截取。
注意事项:
- 索引越界问题:若起始索引为负数或超过字符串长度,会抛出
StringIndexOutOfBoundsException;结束索引若小于起始索引或超出字符串长度,同样会抛出异常。 - 字符串不可变性:
substring()方法不会修改原字符串,而是返回新的String对象,原字符串保持不变。String result = str.substring(2)后,str的值仍为"HelloWorld"。
分割与提取:split()与正则表达式的结合
当需要按特定规则分割字符串并提取子串时,split()方法与正则表达式是高效工具。split()方法根据正则表达式匹配的分隔符将字符串拆分为字符串数组,后续可通过数组索引提取目标子串。
基本用法:
String[] split(String regex),其中regex为正则表达式分隔符,将日期字符串"2023-10-01"按”-“分割,可执行String[] parts = "2023-10-01".split("-"),结果数组parts包含"2023"、"10"、"01"三个元素。
进阶场景:

- 多字符分隔:若分隔符为多个字符,直接传入即可,如
"Java,Python;C++".split(",|;")将按逗号或分号分割。 - 限制分割次数:
split(String regex, int limit)可通过limit参数控制分割次数,例如"a,b,c,d".split(",", 2)将返回["a", "b,c,d"],仅分割前两个元素。
注意事项:
- 特殊字符转义:若分隔符包含正则表达式中的特殊字符(如、、等),需使用双反斜杠
\\转义,按点号分割IP地址"192.168.1.1",应写为"192.168.1.1".split("\\.")。 - 空字符串处理:若连续出现分隔符(如
"a,,b"),split()默认会保留空字符串元素,可通过split("(?!^)")等正则优化。
灵活匹配:正则表达式的高级截取
对于复杂的文本截取需求(如提取特定格式的内容),正则表达式配合Pattern和Matcher类能实现更灵活的操作,正则表达式通过模式匹配定位目标子串,并通过group()方法提取结果。
核心步骤:
- 使用
Pattern.compile(String regex)编译正则表达式模式; - 通过
pattern.matcher(String input)创建Matcher对象; - 调用
matcher.find()查找匹配项,再通过matcher.group()获取结果。
实例:提取邮箱地址
import java.util.regex.*;
public class RegexExample {
public static void main(String[] args) {
String text = "联系方式:user@example.com 或 admin@test.org";
Pattern pattern = Pattern.compile("\\b\\w+@\\w+\\.\\w+\\b");
Matcher matcher = pattern.matcher(text);
while (matcher.find()) {
System.out.println("提取到邮箱:" + matcher.group());
}
}
}
输出结果为"user@example.com"和"admin@test.org"。
常用正则元字符:

- 匹配任意字符(除换行符);
- 匹配0次或多次;
- 匹配1次或多次;
- 匹配0次或1次;
[]:字符集,如[a-z]匹配小写字母;- 分组,用于提取
group()内容。
性能与扩展:第三方库与工具类
虽然Java内置方法已能满足大部分需求,但在处理大规模文本或复杂场景时,第三方库可提升开发效率与性能。
Apache Commons Lang:
StringUtils类提供了更安全的字符串截取方法,如StringUtils.substring(String str, int start, int end),其优势在于自动处理索引越界问题:若起始索引为负数,默认从0开始;若结束索引超出长度,自动截取到末尾。
Guava库:
CharMatcher类可用于按字符类型截取,例如提取字符串中的所有数字:
import com.google.common.base.CharMatcher; String text = "abc123def456"; String digits = CharMatcher.digit().retainFrom(text); // 结果:"123456"
实践中的注意事项
- 编码问题:若字符串包含非ASCII字符(如中文),需确保编码一致(如UTF-8),否则可能出现截取乱码。
"中文".substring(1)在UTF-8编码下可能返回”文”,但需确保字符串初始化时编码正确。 - 性能优化:循环中频繁调用
substring()会生成大量临时对象,建议使用StringBuilder或直接操作字符数组(toCharArray())提升性能。 - 边界测试:始终测试字符串为空、长度为1、索引为0或等于长度等边界情况,避免异常。
Java字符串截取方法多样,从基础的substring()到灵活的正则表达式,再到第三方库的扩展功能,开发者需根据需求复杂度、性能要求及代码可读性选择合适的技术,掌握核心方法的原理与注意事项,结合实际场景灵活应用,能高效解决各类字符串处理问题,为Java程序开发奠定坚实基础。




















