You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java用substring实现空格移除时抛出StringIndexOutOfBounds的原因

异常触发原因及代码问题说明

代码存在的核心问题

  • 首先是条件判断语法错误:你在if判断中使用了赋值运算符=而非相等判断运算符==:
    if (isSpace = false)
    
    这行代码会直接将isSpace强制赋值为false,再判断赋值结果(恒为false),因此if代码块永远不会执行,updated最终只会返回空字符串,完全不符合移除空格的预期逻辑。
  • 其次是你遇到的StringIndexOutOfBoundsException异常:你贴出的代码本身不会触发该异常,因为循环条件i < s.length()保证了i的最大值为s.length()-1,此时substring(i, i+1)的结束索引为s.length(),属于Javasubstring方法的合法取值范围。出现该异常只有两种常见可能:
    • 你实际运行的代码循环条件写为了i <= s.length():当i等于s.length()时,i+1为s.length()+1,超出了字符串的最大合法结束索引,触发越界
    • 你在循环内部修改了s的指向,给s重新赋值为长度更小的字符串,导致后续循环中i超过了新的s的长度

代码优化建议

你不需要用substring逐位截取,直接用charAt方法获取对应位置的字符判断即可,性能更好,也不会有索引风险:

private String remove_spaces(String s){
    if (s == null) return "";
    s = s.trim();
    StringBuilder updated = new StringBuilder();
    for (int i = 0;  i < s.length(); i++) {
        char c = s.charAt(i);
        if (c != ' ') {
            updated.append(c);
        }
    }
    return updated.toString();
}

如果不需要自定义实现,直接调用JDK自带方法更简单:s.replaceAll("\\s", "")即可移除所有类型的空白字符。

内容的提问来源于stack exchange,提问作者Marie Scala

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 03:57:04