Java字符串逐个删除单个字符报错问题求助
解决字符串逐个删除字符的索引越界问题
首先,咱们来拆解你遇到的问题:你的代码之所以抛出java.lang.StringIndexOutOfBoundsException,核心是循环逻辑和字符串拼接的思路都错了,甚至可能在某些场景下会出现负数索引的情况。
错误原因分析
- 索引逻辑错误:你当前的循环从
i=1开始,而且拼接时用了substring(0, i-1) + substring(i-1, word.length())——这其实是把原字符串从i-1位置拆成两部分再拼回去,结果还是原字符串,根本没删除任何字符! - 潜在的负数索引:如果不小心把循环起始值改成
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
相关产品推荐
相关产品推荐

