我一直收到StringIndexOutOfBoundsException。我正在尝试使用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: 18at java.lang.String.charAt(String.java:658)at Main.LetterChanges(Main.java:11)at Main.main(Main.java:25)
3 回答
拉风的咖菲猫
TA贡献1995条经验 获得超2个赞
问题是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();}
肥皂起泡泡
TA贡献1829条经验 获得超6个赞
private static String LetterChanges(String str) { 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 < str.length() ; i++) { change = change.concat(Character.toString(getNextChar(str.charAt(i), alpha))); } return change;}private static char getNextChar(char eachChar, char[] alpha) { int charIndex = -1; for(int i = 0 ; i < alpha.length ; i++) { if(alpha[i] == eachChar) { charIndex = i; break; } } if(charIndex != -1) { //To handle the last indexed char if(charIndex == alpha.length-1) { return alpha[0]; } else { return alpha[charIndex+1]; } } //default for unknown character return '-';}
此代码将输入字符串限制为alpha数组元素,数组外的任何内容都将默认为“ - ”。此代码还将循环元素,即输入中的“z”将替换为“a”。
元芳怎么了
TA贡献1798条经验 获得超7个赞
如果str小于26(alpha.length),则str.charAt(i)将给出错误。
alpha [i + 1],如果我是25,则alpha [i + 1] = alpha [26]不存在并再次出错
添加回答
举报
0/150
提交
取消