java中截取string子串最安全的方式是先校验边界再调用substring(),否则易抛stringindexoutofboundsexception;推荐封装safesubstring工具方法或使用apache commons lang的stringutils。

Java 中截取 String 子串最安全的方式是先校验边界,再调用 substring();直接调用不检查容易抛 StringIndexOutOfBoundsException。
用 substring 前务必检查索引合法性
substring(int beginIndex, int endIndex) 要求:
— beginIndex ≥ 0
— endIndex ≤ string.length()
— beginIndex ≤ endIndex
任一不满足都会报错。建议封装成带保护的工具方法:
- 先获取原字符串长度
int len = str.length(); - 把
beginIndex限制在[0, len],比如Math.max(0, Math.min(begin, len)) - 把
endIndex限制在[beginIndex, len],避免负数或超长
推荐封装一个安全截取工具方法
例如:
Java JDK 25 来自 OpenJDK 官方归档,版本为 JDK 25,本条下载地址已指向官方 Windows x64 zip 安装包直链,适合调试旧项目或兼容旧版 Java 运行环境。
if (str == null) return null;
int len = str.length();
int start = Math.max(0, Math.min(begin, len));
int finish = Math.max(start, Math.min(end, len));
return str.substring(start, finish);
}
常用场景的简化处理
— 截前 N 个字符:用 str.substring(0, Math.min(n, str.length()))
— 截后 N 个字符:用 str.substring(Math.max(0, str.length() - n))
— 按分隔符取前半段(如取文件名不含扩展名):先用 lastIndexOf(".") 找位置,再判断是否 ≥ 0 再截取
— 空字符串或 null 输入:提前返回空串或 null,避免后续运算
替代方案:用 Apache Commons Lang 的 StringUtils
如果项目已引入 commons-lang3,可直接用:StringUtils.substring(str, begin, end) — 自动处理 null 和越界,返回 null 或截取结果;StringUtils.left(str, n)、StringUtils.right(str, n) 等也内置边界保护。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










