猿问

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

我一直收到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)


慕雪6442864
浏览 411回答 3
3回答

拉风的咖菲猫

问题是str可能小于26&nbsp;的长度(因为你在列表alpha上迭代)所以str.charAt(i)将抛出异常。如果你的字符串保证它只包含ASCII字母,那么实现它的一种方法是:String&nbsp;getChange(String&nbsp;str){ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;StringBuilder&nbsp;change&nbsp;=&nbsp;new&nbsp;StringBuilder(); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(int&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;<&nbsp;str.length();&nbsp;i++){ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;char&nbsp;c&nbsp;=&nbsp;str.charAt(i); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;nextCharPos&nbsp;; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;('a'&nbsp;<=&nbsp;c&nbsp;&&&nbsp;c&nbsp;<=&nbsp;'z') &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nextCharPos&nbsp;=&nbsp;((int)&nbsp;('a'))&nbsp;+&nbsp;((c&nbsp;-&nbsp;'a')&nbsp;+&nbsp;1)&nbsp;%&nbsp;26; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;if&nbsp;('A'&nbsp;<=&nbsp;c&nbsp;&&&nbsp;c&nbsp;<=&nbsp;'Z') &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nextCharPos&nbsp;=&nbsp;((int)&nbsp;('A'))&nbsp;+&nbsp;((c&nbsp;-&nbsp;'A')&nbsp;+&nbsp;1)&nbsp;%&nbsp;26; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;change.append(c); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;continue; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;char&nbsp;nextChar&nbsp;=&nbsp;(char)(nextCharPos); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;change.append(nextChar); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;change.toString();}

肥皂起泡泡

private&nbsp;static&nbsp;String&nbsp;LetterChanges(String&nbsp;str)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;change&nbsp;=&nbsp;""; &nbsp;&nbsp;&nbsp;&nbsp;char[]&nbsp;alpha&nbsp;=&nbsp;{&nbsp;'a',&nbsp;'b',&nbsp;'c',&nbsp;'d',&nbsp;'e',&nbsp;'f',&nbsp;'g',&nbsp;'h',&nbsp;'i',&nbsp;'j',&nbsp;'k',&nbsp;'l',&nbsp;'m',&nbsp;'n',&nbsp;'o',&nbsp;'p',&nbsp;'q',&nbsp;'r',&nbsp;'s', &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'t',&nbsp;'u',&nbsp;'v',&nbsp;'w',&nbsp;'x',&nbsp;'y',&nbsp;'z'&nbsp;}; &nbsp;&nbsp;&nbsp;&nbsp;for(int&nbsp;i&nbsp;=&nbsp;0&nbsp;;&nbsp;i&nbsp;<&nbsp;str.length()&nbsp;;&nbsp;i++)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;change&nbsp;=&nbsp;change.concat(Character.toString(getNextChar(str.charAt(i),&nbsp;alpha))); &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;change;}private&nbsp;static&nbsp;char&nbsp;getNextChar(char&nbsp;eachChar,&nbsp;char[]&nbsp;alpha)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;charIndex&nbsp;=&nbsp;-1; &nbsp;&nbsp;&nbsp;&nbsp;for(int&nbsp;i&nbsp;=&nbsp;0&nbsp;;&nbsp;i&nbsp;<&nbsp;alpha.length&nbsp;;&nbsp;i++)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(alpha[i]&nbsp;==&nbsp;eachChar)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;charIndex&nbsp;=&nbsp;i; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;if(charIndex&nbsp;!=&nbsp;-1)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//To&nbsp;handle&nbsp;the&nbsp;last&nbsp;indexed&nbsp;char&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(charIndex&nbsp;==&nbsp;alpha.length-1)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;alpha[0]; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;else&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;alpha[charIndex+1]; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;//default&nbsp;for&nbsp;unknown&nbsp;character &nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;'-';}此代码将输入字符串限制为alpha数组元素,数组外的任何内容都将默认为“ - ”。此代码还将循环元素,即输入中的“z”将替换为“a”。

元芳怎么了

如果str小于26(alpha.length),则str.charAt(i)将给出错误。alpha [i + 1],如果我是25,则alpha [i + 1] = alpha [26]不存在并再次出错
随时随地看视频慕课网APP

相关分类

Java
我要回答