簡體   English   中英

java中的字符串索引越界錯誤(charAt)

[英]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.

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