我一直在获取StringIndexOutOfBoundsException。我正在尝试获取一个String并将每个字母替换为其后的一个字母,然后返回新的可操纵String。例如,“嘿”是“ Ifz”。
我尝试更改索引,但是没有任何作用。
String change = "";
char[] alpha = {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'};
for(int i = 0; i < alpha.length; i++) {
if(str.charAt(i) == alpha[i]) {
change += alpha[i+1] + "";
}
}
return change;
}
public static void main (String[] args) {
// keep this function call here
Scanner s = new Scanner(System.in);
System.out.print(LetterChanges(s.nextLine()));
}
Error Message:
Exception in thread "main" java.lang.StringIndexOutOfBoundsException:
String index out of range: 18
at java.lang.String.charAt(String.java:658)
at Main.LetterChanges(Main.java:11)
at Main.main(Main.java:25)
答案 0 :(得分:1)
问题是str
的长度可能小于26(当您遍历列表alpha时),因此str.charAt(i)
将引发异常。如果您的字符串保证只包含ASCII字母,那么一种实现方式是:
String getChange(String str){
StringBuilder change = new StringBuilder();
for (int i = 0; i < str.length(); i++){
char c = str.charAt(i);
int nextCharPos ;
if ('a' <= c && c <= 'z')
nextCharPos = ((int) ('a')) + ((c - 'a') + 1) % 26;
else if ('A' <= c && c <= 'Z')
nextCharPos = ((int) ('A')) + ((c - 'A') + 1) % 26;
else {
change.append(c);
continue;
}
char nextChar = (char)(nextCharPos);
change.append(nextChar);
}
return change.toString();
}
答案 1 :(得分:0)
答案 2 :(得分:0)
statistic=0.459, pvalue=0.0
此代码将输入字符串限制为alpha数组元素,并且数组之外的任何内容均默认为'-'。该代码还将循环元素,即输入中的“ z”将替换为“ a”。