java中substring按索引截取子串,split按正则分隔符拆分字符串;前者需注意索引边界,后者需转义特殊字符并处理空串。

Java 中 substring 用于按位置截取子串,split 用于按分隔符拆分字符串,两者用途不同,用法也需注意边界和正则细节。
substring:按索引截取子串
substring 是 String 类的方法,有两种重载形式:
-
substring(int beginIndex):从beginIndex开始到末尾 -
substring(int beginIndex, int endIndex):从beginIndex(含)到endIndex(不含)
注意:beginIndex 必须 ≥ 0,endIndex ≤ 字符串长度,否则抛 StringIndexOutOfBoundsException。索引从 0 开始,类似数组。
例如:
String s = "hello world"; String a = s.substring(0, 5); // "hello" String b = s.substring(6); // "world"
split:按分隔符分割成字符串数组
split(String regex) 按正则表达式切分字符串,返回 String[]。常见易错点:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 参数是正则,不是普通字符串。如按点号
.分割,要写成"\."(因为.在正则中匹配任意字符) - 连续分隔符会产生空字符串;末尾的分隔符默认被忽略(除非传入负数限制参数)
-
split("x", -1)可保留末尾空项;split("x", 2)最多返回 2 个元素
例如:
String s = "a,b,,c,";
String[] parts = s.split(","); // ["a", "b", "", "c"](末尾空串被丢弃)
String[] all = s.split(",", -1); // ["a", "b", "", "c", ""](保留全部)
实用技巧与避坑提醒
实际使用时要注意这些细节:
- 截取前建议先用
str != null && !str.isEmpty()判空,避免空指针或越界 - 对用户输入或外部数据做
split时,优先考虑用Pattern.quote()转义分隔符(如split(Pattern.quote("."))) - 如果只是简单按固定字符分割且不涉及正则,可用
StringTokenizer(但已不推荐,仅作了解) - 需要多次截取或复杂处理时,可结合
indexOf/lastIndexOf定位再substring,更可控
替代方案:现代写法更安全
Java 11+ 提供了更简洁安全的 API:
-
str.substring(start).substring(0, len)可改用str.strip().substring(...)防空白干扰 -
str.lines().toArray(String[]::new)适合按行分割 - 第三方库如 Apache Commons Lang 的
StringUtils.substring()和StringUtils.split()会自动判空、容忍负索引等
不复杂但容易忽略。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










