首页 > 解决方案 > 在这种情况下如何防止 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 条件。可能听起来像糟糕的研究,但我已经尝试了很长一段时间,但在发布之前无法通过。

标签: javaindexoutofboundsexception

解决方案


尝试以下操作:

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

推荐阅读