簡體   English   中英

為什么我會出現索引超出范圍異常錯誤

[英]why i am geeting Index Out Of Bounds Exception error

在這里,我試圖打印下一個輔音字母,假設如果我輸入 java outpt 應該看起來像 kava。 由於 j 和 v 是輔音,因此如果它是輔音,它應該打印下一個字母

在線程“main”中輸入任何字符串 = java bjcException java.lang.StringIndexOutOfBoundsException: String index out of range: 1 at java.lang.String.charAt(Unknown Source) at Consonants.main(Consonants.java:30)

    String consonants = "BCDFGHJKLMNPQRSTVWXYZ".toLowerCase();

    BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
    System.out.print("Enter any string = ");
    String inputString = bf.readLine().toLowerCase();

    for(int i=0; i < inputString.length(); i++){
        inputChar = inputString.charAt(i);
        //int asciiInput = (int) inputChar; 
        String str1 = inputString.charAt(i) + "";
        int asciiInput = (int) str1.charAt(i);

        for(int j = 0; j < consonants.length(); j++){
         stringChar = consonants.charAt(j);
         System.out.print(stringChar);
         //int asciiConsonants = (int) stringChar;
         String str2 = consonants.charAt(j) + "";
         int asciiConsonants = (int) str2.charAt(j);

         if( !str1.equals(str2) ){
             nextChar = (char) asciiInput;
             System.out.print(nextChar);
         } else if ( str1.equals(str2) ) {
             nextChar = (char) (asciiConsonants + 1);
             System.out.print(nextChar);     
         }

        }
    }   

str2將只有 1 個字符,因為consonants.charAt(j) 。charAt consonants.charAt(j)將獲得 1 個字符,而""包含 0 個字符。

另一方面, consonants包含超過 1 個字符。 因此, j將變為1str2.charAt(j); 將發出錯誤。

您可能需要(int) str1.charAt(0)(int) str2.charAt(0)而不是(int) str1.charAt(i)(int) str2.charAt(j)

您收到錯誤的原因是str1str2是單字符字符串,因此除非ij為 0,否則charAt()將超出范圍。

另外,如果你能原諒我,我對你的代碼做了一些改進:

String vowels = "aeiou";
String inputString = bf.readLine().toLowerCase();
for (int i = 0; i < inputString.length(); i++) {
    char c = inputString.charAt(i);
    boolean isVowel = false;
    for (int j = 0; j < vowels.length(); j++) {
        if (vowels.charAt(j) == c) {
            isVowel = true;
            break;
        }
    }
    System.out.print(isVowel ? c : (char)(c + 1));
}

以下代碼是導致您異常的原因:

    String str1 = inputString.charAt(i) + "";
    int asciiInput = (int) str1.charAt(i); 

str1 只有一個字符,在第二次迭代中您要求第二個不存在的字符。 你只會在索引為 0 時工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM