为了账号安全,请及时绑定邮箱和手机立即绑定

为什么我要继续这个索引erorr?

为什么我要继续这个索引erorr?

慕雪6442864 2019-04-10 18:15:04
我一直收到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();}


查看完整回答
反对 回复 2019-05-15
?
肥皂起泡泡

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”。


查看完整回答
反对 回复 2019-05-15
?
元芳怎么了

TA贡献1798条经验 获得超7个赞

  1. 如果str小于26(alpha.length),则str.charAt(i)将给出错误。

  2. alpha [i + 1],如果我是25,则alpha [i + 1] = alpha [26]不存在并再次出错


查看完整回答
反对 回复 2019-05-15
  • 3 回答
  • 0 关注
  • 410 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信