1. 方法签名
substring()
方法提供两种重载形式:
- ✅ 单参数形式:仅指定起始索引,截取到字符串末尾
- ✅ 双参数形式:指定起始索引和结束索引,截取两者之间的子串
public String substring(int beginIndex)
public String substring(int beginIndex, int endIndex)
2. 使用示例
⚠️ 注意:结束索引是不包含的(左闭右开区间)
@Test
public void whenCallSubstring_thenCorrect() {
String s = "Welcome to Baeldung";
// 截取 [0,7) 区间的字符
assertEquals("Welcome", s.substring(0, 7));
}
3. 异常处理
❌ 当出现以下情况时抛出 IndexOutOfBoundsException
:
- 起始索引为负数
- 起始索引大于结束索引
- 结束索引超过字符串长度
@Test(expected = IndexOutOfBoundsException.class)
public void whenSecondIndexEqualToLengthOfString_thenCorrect() {
String s = "Welcome to Baeldung";
// 字符串长度仅17,却尝试截取到20
String sub = s.substring(0, 20);
}
4. 关键要点
- 📌 单参数形式等价于
substring(beginIndex, length())
- 📌 原字符串不会被修改(String不可变)
- 📌 结束索引最大值 = 字符串长度(不会报错)
- 📌 空字符串截取会返回空字符串而非null
💡 踩坑提醒:新手常误以为结束索引是包含的,导致截取结果多一个字符。建议用
s.substring(0, s.length())
获取完整字符串而非直接用原变量。