[英]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
將變為1
和str2.charAt(j);
將發出錯誤。
您可能需要(int) str1.charAt(0)
和(int) str2.charAt(0)
而不是(int) str1.charAt(i)
和(int) str2.charAt(j)
。
您收到錯誤的原因是str1
和str2
是單字符字符串,因此除非i
和j
為 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.