我试图显示一个字母在一个字符串中出现的次数,并将其输出到一个新字符串中(compressedString)。
例如:aabcccccaaa应该显示a2b1c5a3
到目前为止,我之所以显示a2只是因为我包含了break语句。如果我把它拿出来,我会得到StringIndexOutOfBoundsException
我的问题是:如何继续遍历整个字符串以获得上述输出的其余部分,而不获得StringIndexOutOfBoundsException
我通过调试器运行了它,但我仍然不清楚。

public class Problem {

public static void main(String []args) {
    String str = "aabcccccaaa";
    System.out.println(compressBad(str));
}

public static String compressBad(String str) {
    int countConsecutive = 0;
    String compressedString = "";

    for(int i = 0; i < str.length(); i++) {
        countConsecutive++;
        if(str.charAt(i) != str.charAt(i + 1)) {
            compressedString += "" + str.charAt(i) + countConsecutive;
            break;
        }
    }
    return compressedString;
  }
}

最佳答案

试试这个

public class Problem {

   public static void main(String []args) {
     String str = "aaabc";
     System.out.println(compressBad(str));
 }

 public static String compressBad(String str) {
    int countConsecutive = 0;
    String compressedString = "";

 for(int i = 0; i < str.length(); i++) {
   countConsecutive++;
   //avoid index out of bounds error
   if(str.length() == (i + 1)){
       compressedString += ""+ str.charAt(i) + countConsecutive;
       countConsecutive = 0;
       break;
   }
   else if(str.charAt(i) != str.charAt(i + 1)){
       compressedString += ""+ str.charAt(i) + countConsecutive;
       countConsecutive = 0;
   }


}
return compressedString;
}


}

07-24 09:27