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
字符,这会引发StringIndexOutOfBoundsException
(RuntimeException
)。
【讨论】:
【参考方案2】:Java 中的字符串索引(与任何其他类似数组的结构一样)从零开始。这意味着input.charAt(0)
是最左边的字符。最后一个字符是input.charAt(input.length() - 1)
。
因此,您在 for
循环中引用了太多元素。将<=
替换为<
进行修复。如果您将代码移植到 C++(具有无符号类型),替代方案 (<= input.length() - 1
) 可能会让您难以接受。
顺便说一下,Java 运行时会发出非常有用的异常和错误消息。一定要学会阅读和理解它们。
【讨论】:
【参考方案3】:将 for 循环条件 j <= input.length()
替换为 j < 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)的主要内容,如果未能解决你的问题,请参考以下文章