java中的字符串索引越界错误(charAt)

Posted

技术标签:

【中文标题】java中的字符串索引越界错误(charAt)【英文标题】:string index out of bounds error in java (charAt) 【发布时间】:2014-05-01 22:04:35 【问题描述】:

快速提问。我在程序中有这段代码:

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,如图所示

运行代码会产生这个错误:

线程“主”java.lang.StringIndexOutOfBoundsException 中的异常:字符串索引超出范围:6 在 java.lang.String.charAt(未知来源) 在 program.main(program.java:15)

如果我将 charAt int 更改为 0 而不是 i,则不会产生错误... 可以做什么?有什么问题?

【问题讨论】:

为什么在循环中使用 i?你不能用 j 吗? 在这种情况下,我使用 i 作为计数整数,就像他们在 for 循环中所做的那样,因为我没想到会使用 for 循环,然后我做了...... 我会投票给其他回复,但我还没有所需的代表 感谢大家帮我解决这个问题! 【参考方案1】:

替换:

j <= input.length()

...与...

j < input.length()

Java String 字符索引是从 0 开始的,因此您的循环终止条件应该是 input 的长度 - 1。

目前,当您的循环在终止前到达倒数第二次迭代时,它会在等于input 长度的索引处引用input 字符,这会引发StringIndexOutOfBoundsExceptionRuntimeException)。

【讨论】:

【参考方案2】:

Java 中的字符串索引(与任何其他类似数组的结构一样)从零开始。这意味着input.charAt(0) 是最左边的字符。最后一个字符是input.charAt(input.length() - 1)

因此,您在 for 循环中引用了太多元素。将&lt;= 替换为&lt; 进行修复。如果您将代码移植到 C++(具有无符号类型),替代方案 (&lt;= input.length() - 1) 可能会让您难以接受。

顺便说一下,Java 运行时会发出非常有用的异常和错误消息。一定要学会阅读和理解它们。

【讨论】:

【参考方案3】:

将 for 循环条件 j &lt;= input.length() 替换为 j &lt; input.length() ,因为 Java 中的字符串遵循从零开始的索引。 例如字符串 "india" 的索引将从 0 开始到 4。

【讨论】:

【参考方案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++;

【讨论】:

【参考方案5】:
for (int j = 0; j < input.length(); j++)

    System.out.print(input.charAt(j));
    System.out.print(" "); //don't ask about this.

【讨论】:

【参考方案6】:

尝试以下方法:

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++;
 

【讨论】:

【参考方案7】:

使用这个;

for (int j = 0; j < input.length(); j++)

    System.out.print(input.charAt(j));
    System.out.print(" "); //don't ask about this.

【讨论】:

以上是关于java中的字符串索引越界错误(charAt)的主要内容,如果未能解决你的问题,请参考以下文章

Java charAt() 字符串索引超出范围:5

Java charAt() 方法

如何测试索引越界错误? [复制]

Java charAt() 方法

Java中的数组越界?

JavaScript charAt() 方法