的StringIndexOutOfBoundsException

时间:2011-09-21 20:05:18

标签: java

我在使Java方法正常工作方面遇到了一些问题。在程序中,我创建了一个由不同长度的许多不同单词组成的数组。我正在处理的方法应该读取字长,字母和位置的用户输入,然后Java将打印出与这三个参数匹配的任何单词(例如,如果用户键入字长4,字母A和位置2,将打印出长度为4且在第2位包含字母A的单词。

无论如何,我创建的方法如下所示:

public static void inputMethod(int length, char letter, int position){
    for (int index = 0; index < wordTable.length; index++) {
        if (length == wordTable[index].length() && letter == wordTable[index].charAt(position) )
            System.out.println(wordTable[index]); }

此方法适用于某些输入,但对于其他输入,我收到错误消息,例如:

Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 5
at java.lang.String.charAt(Unknown Source)
at Wordarray.inputMethod(Wordarray.java:153)
at Wordarray.main(Wordarray.java:61)

如果有人能向我解释我如何解决这个问题,我将不胜感激!就像我说的那样,我只收到某些输入信息。对于其他输入,程序就像它应该的那样工作。

4 个答案:

答案 0 :(得分:7)

嗯,显然position大于wordTable[index](或负数)的字符串长度。您还需要检查字符串的长度。

答案 1 :(得分:2)

如果您已更换

for (int index = 0; index < wordTable.length; index++) {

for (int index = 0; index < length; index++) {

这很可能不是你真正想要的。

更好的方法是这样的:

public static void inputMethod(int length, char letter, int position) {
  // check if input is valid
  if(position < length)
    for (int index = 0; index < wordTable.length; index++) {
      if (length == wordTable[index].length() && letter == wordTable[index].charAt(position) )
            System.out.println(wordTable[index]);
}

答案 2 :(得分:1)

如果给定位置或等于大于当前单词的长度,则可能发生这种情况。另外值得一看:第一个字符position01吗?

答案 3 :(得分:0)

这是您的实际代码吗?您在for循环中使用了三个不同的变量:indexsindeksindex。即使编译,我也很惊讶。不要重新键入代码,剪切并粘贴实际代码。