在这种情况下,如何防止ArrayIndexOutOfBoundsException?

时间:2020-10-02 12:40:57

标签: java indexoutofboundsexception

问题是: 给定一个字符串: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 个答案:

答案 0 :(得分:0)

尝试以下操作:

  • 将第一个字符分配给自变量。
  • 当不再等于后续字符时。添加到具有该字符的字符串并计数。
  • 然后重置该字符并计数到下一个和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