在这种情况下如何防止 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