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

时间:2014-03-24 13:47:44

标签: 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(未知来源)
  在program.main(program.java:15)

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

7 个答案:

答案 0 :(得分:5)

替换:

j <= input.length()

...与......

j < input.length()

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

目前,当你的循环在终止前达到倒数第二次迭代时,它会在等于input长度的索引处引用input个字符,这会抛出StringIndexOutOfBoundsException(a {{1 }})。

答案 1 :(得分:3)

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

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

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

答案 2 :(得分:1)

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

答案 3 :(得分:0)

您正在从[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++;
}

答案 4 :(得分:0)

尝试以下方法:

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

答案 5 :(得分:0)

使用此功能;

for (int j = 0; j < input.length(); j++)
{
    System.out.print(input.charAt(j));
    System.out.print(" "); //don't ask about this.
}

答案 6 :(得分:0)

for (int j = 0; j < input.length(); j++)
{
    System.out.print(input.charAt(j));
    System.out.print(" "); //don't ask about this.
}