substring(0, 6) 是左闭右开区间,取索引0至5共6个字符;越界需提前校验长度,推荐用Math.min(6, str.length())或封装safeSubstring工具方法。
substring(0, 6) 的索引到底怎么算?
substring 是左闭右开区间,substring(0, 6) 表示从索引 0 开始(含),到索引 6 结束(不含),刚好取前 6 个字符。注意:索引从 0 开始,所以第 1 个字符是 str.charAt(0),第 6 个是 str.charAt(5)。
常见误解是以为 substring(0, 6) 会取到第 6 个位置的字符——不会,它最多取到下标 5。
- 字符串
"abc"调用substring(0, 6)会直接抛出StringIndexOutOfBoundsException -
"hello world"的长度是 11,substring(0, 6)返回"hello "(含空格) - 空字符串
""、null值必须单独判空,substring不处理null
越界时怎么避免崩溃?
不能依赖 try-catch 来兜底——性能差且掩盖逻辑问题。正确做法是提前校验长度:
- 用
str != null && str.length() >= 6判断是否够长 - 不够长时,按需返回原字符串(
str)或补足(如String.format("%-6s", str)) - 若业务允许“尽可能取”,可改用
str.substring(0, Math.min(6, str.length()))
注意:Math.min(6, str.length()) 是安全的,因为 substring(0, 0) 合法(返回空字符串),而 substring(0, str.length()) 等价于复制原串。
立即学习“Java免费学习笔记(深入)”;