[英]Java Error java.lang.StringIndexOutOfBoundsException: String index out of range: 0
[英]java.lang.StringIndexOutOfBoundsException: String index out of range: 45
我正在尝试制作一个接受以下字符串的程序: KKKKKKKKKKKKKBCCDDDDDDDDDDDDDDDKKKKKMNUUUGGGGG
并返回如下内容: $K13BCC$D15$K5MNUUU$G5
另一个例子是XYZAAAAAAGGTCCCCCCTTTAAAAAAAAAAAAAAKK
返回: XYZ*A6GGT*C6TTT*A14KK
但是当我尝试第一个输入时,我得到了这个 StringIndexOutOfBoundsException,谁能告诉我为什么? 这是我的代码:
import java.util.Scanner;
class RunLengthEncoding {
public static void main(String[] args) {
Scanner h = new Scanner(System.in);
String s;
char g;
System.out.print("Enter input string: ");
s = h.next();
for (int d = 0; d < s.length(); d++){
if (!Character.isUpperCase(s.charAt(d))){
System.out.print("Bad input.");
return;
}
}
System.out.print("Enter flag character: ");
g = h.next().charAt(0);
if (g != '#' && g != '$' && g != '&' && g != '*'){
System.out.println("Bad input.");
return;
}
char c = s.charAt(0);
String encode = "";
for (int n = 0; n < s.length() - 1; n++){
int k = 0;
int j = 0;
while (k + n < s.length() && s.charAt(k + n) == c){
j++;
k++;
}
if (j > 3){
encode += g;
encode += c;
encode += j;
n += j - 1;
}
else {
encode += c;
}
c = s.charAt(n + 1);
}
System.out.println("Encoded: " + encode);
}
}
您获得越界异常的原因是因为您在 for 循环语句之外递增n
。 当你在做n += j - 1;
时,你会这样做。 . 这会给您一个超出范围的异常,因为当您执行c = s.charAt(n + 1);
, n 可以大于或等于字符串的长度。 作为一般规则,您不应在 for 循环之外的任何地方更改 for 循环中迭代变量的值。 它使代码更难调试。
对于任何对我提出的解决方案感兴趣的人:
import java.util.Scanner;
public class RunLengthEncoding {
public static void main(String[] args){
Scanner h = new Scanner(System.in);
String s;
char g;
StringBuilder encode = new StringBuilder();
System.out.print("Enter input string: ");
s = h.next();
for (int d = 0; d < s.length(); d++) {
if (!Character.isUpperCase(s.charAt(d))) {
System.out.print("Bad input.");
return;
}
}
System.out.print("Enter flag character: ");
g = h.next().charAt(0);
if (g != '#' && g != '$' && g != '&' && g != '*') {
System.out.println("Bad input.");
return;
}
for (int n = 0; n < s.length(); n++) {
int k = 1;
while (n < s.length() - 1 && s.charAt(n) == s.charAt(n + 1)) {
k++;
n++;
}
if (k > 3) {
encode.append(g).append(s.charAt(n)).append(k);
}
else {
for (int c = 0; c < k; c++) {
encode.append(s.charAt(n));
}
}
}
System.out.print("Encoded: " + encode);
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.