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

Java字符串逐个删除单个字符报错问题求助

解决字符串逐个删除字符的索引越界问题

首先,咱们来拆解你遇到的问题:你的代码之所以抛出java.lang.StringIndexOutOfBoundsException,核心是循环逻辑和字符串拼接的思路都错了,甚至可能在某些场景下会出现负数索引的情况。

错误原因分析

  1. 索引逻辑错误:你当前的循环从i=1开始,而且拼接时用了substring(0, i-1) + substring(i-1, word.length())——这其实是把原字符串从i-1位置拆成两部分再拼回去,结果还是原字符串,根本没删除任何字符!
  2. 潜在的负数索引:如果不小心把循环起始值改成i=0,那i-1=-1,直接触发索引越界异常(这应该就是你遇到的情况)。

正确的实现方式

要实现逐个删除单个字符的需求,我们需要遍历字符串的每个字符索引(从0到word.length()-1),然后拼接当前索引之前的子串和当前索引之后的子串,这样就相当于删除了当前索引的字符。

修正后的代码如下:

for (int j = 0; j < word.length(); j++) {
    String removed = word.substring(0, j) + word.substring(j + 1);
    // 这里处理生成的字符串,比如打印
    System.out.println(removed);
}

测试示例(以"math"为例)

运行这段代码会输出:

  • ath(删除索引0的'm')
  • mth(删除索引1的'a')
  • mah(删除索引2的't')
  • mat(删除索引3的'h')
    完全符合你想要的效果,还补上了删除最后一个字符的场景。

额外注意事项

  • 如果输入的字符串是空串,记得提前做判断,避免不必要的异常;
  • substring(int beginIndex)方法会返回从beginIndex到字符串末尾的子串,用它来替代substring(j+1, word.length())会更简洁。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 06:50:26