调用charAt()后应用崩溃,代码问题排查及修复咨询
问题分析与修复方案
嘿,这个问题我太熟了——你遇到的是Java里经典的字符串索引越界异常,直接导致了应用崩溃,咱们一步步拆解清楚:
核心问题:循环边界踩坑了
Java里字符串的索引是从0开始算的,比如说你这个"Hello world"长度是11,那有效索引范围是0到10(最后一个字符d的索引是10)。但你的循环条件写的是x <= txt.length(),这就意味着当x等于11的时候,你还会去调用txt.charAt(x)——这时候已经超出了字符串的有效索引范围,JVM直接就抛出StringIndexOutOfBoundsException,应用可不就强制关闭了嘛!
另外还有个小细节容易忽略:你声明了int count;但没初始化,Java里局部变量是没有默认值的,要是直接这么用,编译阶段可能就报错,就算侥幸过了编译,运行时也可能拿到奇怪的数值,这个得补上初始化。
修复后的代码
把循环条件改成x < txt.length(),同时给count初始化,代码就正常了:
String txt = "Hello world"; int count = 0; // 初始化计数器,避免局部变量未赋值问题 for(int x = 0; x < txt.length(); x++) { if (txt.charAt(x) == ' ') { count++; } }
额外小技巧(可选)
要是你只是想统计字符串里的空格数量,其实不用手动写循环,Java有更简洁的写法:
- 用Java 8流:
long count = txt.chars().filter(c -> c == ' ').count();
- 用正则分割:
int count = txt.split(" ", -1).length - 1;
这些方法既简洁,还能避免手动循环容易犯的索引错误,你可以根据场景选着用~
内容的提问来源于stack exchange,提问作者Ties
相关产品推荐
相关产品推荐

