当前位置: 首页 > 面试题库 >

java.lang.StringIndexOutOfBoundsException:字符串索引超出范围

雷方伟
2023-03-14
问题内容

嗨,我编写了Java代码来查找由其他单词组成的最长单词。我的逻辑是从文本文件中读取单词列表,并将每个单词添加到一个数组中(在文本中,单词被排序,并且每行中只有一个单词)之后,我们检查数组中的每个元素是否具有其他元素作为子字符串。如果是这样,我们计算子字符串的数量。具有最大子串数的元素将是结果

当我给一个只有两个单词的文本文件时,代码正在运行。但是,当有两个以上的单词时,我将出现以下错误

java.lang.StringIndexOutOfBoundsException:字符串索引超出范围:3

我感觉到错误发生在这行if(s.charAt(i1)== w.charAt(j1))

  import java.util.*;
  import java.io.*;
  import java.lang.reflect.Array;
  public class Parser
  {
public static void main (String[] args) throws IOException
{
    String [] addyArray = null;

    FileReader inFile = new FileReader ("sample.txt");
    BufferedReader in = new BufferedReader (inFile);
    String line = "";
    int a = 0;
    int size=0;
    String smallestelement = "";

    while(in.ready())
    {
        line=in.readLine();
        while (line != null && line != "\n")
        {
            size++;
            System.out.println(size);
            line = in.readLine();
            if (line == null) line = "\n";
        }
    }
    addyArray = new String[size];
    FileReader inFile2 = new FileReader ("sample.txt");
    BufferedReader in2 = new BufferedReader (inFile2);
    String line2 = "";

    while(in2.ready())
    {
        line2 = in2.readLine();


        while (line2 != null && line2 != "\n")
        {

            addyArray[a] = line2;


            System.out.println("Array"+addyArray[a]);
            line2 = in.readLine();
            a++;
            if (line2 == null) line2 = "\n";
        }

    }


    int numberofsubstrings=0;
    int[] substringarray= new int[size];

    int count=0,no=0;

for(int i=0;i<size;i++)
{       
    System.out.println("sentence "+addyArray[i]);
    for(int j=0;j<size;j++)
    {
        System.out.println("word "+addyArray[j]);

        String w,s;
        s=addyArray[i].trim();
        w=addyArray[j].trim();

        try{
            for(int i1=0;i1<s.length();i1++)
            {
                if(s.equals(w)&& s.indexOf(addyArray[j-1].trim()) == -1)
                {}
            else
            {
                if(s.charAt(i1)==w.charAt(0))
                {                   
                   for(int j1=0;j1<w.length();j1++,i1++)
                   {
                     if(s.charAt(i1)==w.charAt(j1)) //I feel the error is occuring here
                     { count=count+1;}
                       if(count==w.length())
                       {no=no+1;count=0;};

                   }
                }
              }
            }
              System.out.println(no);
        }
        catch(Exception e){System.out.println(e);}
        substringarray[i]=no;
        no=0;

        }
    }



        for(int i=0;i<size;i++)
        {
            System.out.println("Substring array"+substringarray[i]);
        }
    Arrays.sort(substringarray);  
    int max=substringarray[0];

    System.out.println("Final result is"+addyArray[max]+size);

}
    }

问题答案:

这就是问题:

 for(int j1=0;j1<w.length();j1++,i1++)

通过循环每次迭代,你递增i1以及j1i1可能已经在的末尾s,因此在增加它之后,s.charAt(i1)它将无效。

两个方面:

  • 你应该看看 String.regionMatches
  • 使用一致的缩进和合理的空格可以使您的代码 易于阅读。


 类似资料:
  • 问题内容: 因此,我正在编写一个简单的程序来输入字符串并计算总数。的米 所以,这是我的代码 where 和str是我接受过的字符串,但是此错误不断出现 这是什么错误以及如何将其删除? 问题答案: 字符串,有效索引从0到n-1; 更改 至

  • 问题内容: 是一个初学者,谁能帮助我弄清楚我们的情况。我正在尝试读取字符串,并将字符串的每个字符存储在数组中。 输出值 输入一个字符串以相反的顺序垂直提取和显示: 哈克 用户输入的字符串是:HACK 使用用户输入字符串....’HACK’调用类’digitExtractor’的对象’ExtracDig’中的方法’OrderByMaths’ OrderbyMatch:内部方法“ OrderbyMat

  • 问题内容: EVerytime我写了任何与此代码相似的代码,但出现这种类型的错误。它正在构建文件,但不允许其运行,只会引发异常。我不熟悉异常,因为我是一个初学者,请帮助我,特别指出我正在犯的错误。 当我运行程序时,它显示以下错误: 问题答案: 循环控制变量(/ ) 上升到 -这是一个超出范围的索引(因为字符串/列表的最大索引是-请记住第一个索引是0)。 尝试使用和作为循环条件。

  • 问题内容: 我猜我正在收到此错误,因为字符串正在尝试对值进行子字符串化。但是那部分不能消除这个问题吗? 这是Java代码段: 我收到此错误: 问题答案: 我猜我正在收到此错误,因为字符串试图将Null值作为子字符串。但是“ .length()> 0”部分不能消除该问题吗? 不,在itemdescription为null时调用itemdescription.length()不会生成StringInd

  • 问题内容: 我正在编写一个打开文本文件并检查注释的程序。然后,它解析注释以检查某些单词。 错误im出现在以下while循环中,该循环检查是否当前行以空格或除’/’以外的其他字符开头,如果那里存在非反斜杠字符,则while循环移至下一行并检查再次。一旦while循环满足其要求并中断程序崩溃,我将收到以下输出错误。 这是有问题的代码示例 谢谢你的帮助。我确定这是一个简单的错误,但我只是看不到它。 问题

  • 问题内容: 从类中调用函数时出现以下错误:java.lang.StringIndexOutOfBoundsException:超出范围的字符串索引:-1尽管我使用系统打印来查看输入的内容,但仍在substring()函数中进行传递似乎是正确的。函数isContained()返回一个布尔值,该值定义作为参数传递的子字符串是否在单词列表中。我的代码是: 其中size是我在函数中传递的字符串(str)的