java - 在这种情况下如何防止 ArrayIndexOutOfBoundsException?
问题描述
问题是:给定一个字符串:aaaBBB
我需要打印:a3B3(计算给定字符串中每个字母的出现次数)。
我尝试了以下方法:
String x = "aaaBBB";
char[] c = x.toCharArray();
StringBuilder sb = new StringBuilder();
int count = 1;
System.out.println(c.length);
for (int i = 0; i < c.length; i++) {
if (c[i] == c[i+1]) {
count++;
} else {
sb.append(c[i]).append(count);
count = 1;
}
}
System.out.println(sb);
在我最后一次迭代中,当我用 c[i+1] 检查 c[i] 时,我得到了一个 ArrayIndexOutOfBounds 异常(很明显,因为索引 i+1 不存在)。
我想知道一些方法来避免出现这个异常,而不改变 if 条件。可能听起来像糟糕的研究,但我已经尝试了很长一段时间,但在发布之前无法通过。
解决方案
尝试以下操作:
- 将第一个字符分配给自变量。
- 当不再等于后续字符时。添加到具有该字符的字符串并计数。
- 然后重置该字符并计数到下一个和 1。
- 当所有字符都用尽时,添加最后一个字符并计数。
String x = "aaaaBBBcDDDDD";
char[] c = x.toCharArray();
StringBuilder sb = new StringBuilder();
int count = 1;
char ch = c[0];
for (int i = 1; i < c.length; i++) {
if (c[i] == ch) {
count++;
} else {
sb.append(ch).append(count);
ch = c[i];
count = 1;
}
}
sb.append(ch).append(count);
System.out.println(sb);
印刷
a4B3c1D5
推荐阅读
- r - 将字符串比较符号转换为 R 中的函数
- amazon-web-services - “金额”项目和单独的“金额更新条目”项目的 DynamoDB 单表设计
- python - 如何计算输入的小数?
- sql - 选择具有最大值的属性
- ios - 如何提高 AVAssetExportSession 保存性能
- woocommerce - WooCommerce 运费按产品重量计算
- laravel-5 - Laravel 5 中未定义的变量请求
- c# - C#中“%”运算符的含义和使用
- c++ - 为什么我的 C++ 函数只有放在 main() 之后才起作用?
- sql - PARTITION BY 多列同时从另一个表插入数据