在这种情况下如何防止 ArrayIndexOutOfBoundsException?
How to prevent an ArrayIndexOutOfBoundsException in this case?
问题是:
给定一个字符串: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] 时(很明显,因为索引 i+1 不存在),我在最后一次迭代中遇到了 ArrayIndexOutOfBounds 异常。
我想知道一些在不改变 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
问题是: 给定一个字符串: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] 时(很明显,因为索引 i+1 不存在),我在最后一次迭代中遇到了 ArrayIndexOutOfBounds 异常。
我想知道一些在不改变 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