[英]string index out of bounds error in java (charAt)
快速提問。 我在一個程序中有這個代碼:
input = JOptionPane.showInputDialog("Enter any word below")
int i = 0;
for (int j = 0; j <= input.length(); j++)
{
System.out.print(input.charAt(i));
System.out.print(" "); //don't ask about this.
i++;
}
i
是值為 0 的整數運行代碼會產生這個錯誤:
線程“main”中的異常 java.lang.StringIndexOutOfBoundsException:字符串索引超出范圍:6
在 java.lang.String.charAt(Unknown Source)
在 program.main(program.java:15)
如果我將charAt
int
更改為 0 而不是i
,則不會產生錯誤...
可以做什么? 問題是什么?
代替:
j <= input.length()
... 和 ...
j < input.length()
Java String
字符索引是基於 0 的,因此您的循環終止條件應為input
的長度 - 1。
目前,當您的循環在終止前到達倒數第二次迭代時,它會在等於input
長度的索引處引用input
字符,這會引發StringIndexOutOfBoundsException
(一個RuntimeException
)。
Java 中的字符串索引(與任何其他類似數組的結構一樣)是從零開始的。 這意味着input.charAt(0)
是最左邊的字符。 最后一個字符在input.charAt(input.length() - 1)
。
因此,您在for
循環中引用了太多元素。 將<=
替換為<
進行修復。 如果您曾經將代碼移植到 C++(具有無符號類型),則替代方案 ( <= input.length() - 1
) 可能會讓您<= input.length() - 1
。
順便說一下,Java 運行時會發出非常有用的異常和錯誤消息。 一定要學會閱讀和理解它們。
將循環條件j <= input.length()
替換為j < input.length()
,因為 Java 中的字符串遵循基於零的索引。 例如,字符串"india"
索引將從 0 開始到 4。
你從 [0-length] 訪問數組,你應該從 [0-(length-1)]
int i = 0;
for (int j = 0; j < input.length(); j++)
{
System.out.print(input.charAt(i));
System.out.print(" "); //don't ask about this.
i++;
}
請嘗試以下操作:
j< input.length()
接着:
int i = 0;
for (int j = 0; j < input.length(); j++)
{
System.out.print(input.charAt(i));
System.out.print(" "); //don't ask about this.
i++;
}
用這個;
for (int j = 0; j < input.length(); j++)
{
System.out.print(input.charAt(j));
System.out.print(" "); //don't ask about this.
}
for (int j = 0; j < input.length(); j++)
{
System.out.print(input.charAt(j));
System.out.print(" "); //don't ask about this.
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.