我试图显示一个字母在一个字符串中出现的次数,并将其输出到一个新字符串中(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;
}
}