【问题标题】:Why am I getting StringIndexOutOfBoundsException?为什么我会收到 StringIndexOutOfBoundsException?
【发布时间】:2013-02-15 13:12:53
【问题描述】:

我被困在这个项目中。有人可以帮我吗?我收到以下错误:

Exception in thread "main" java.lang.StringIndexOutOfBoundsException:
      String index out of range: 2
   at java.lang.String.substring(Unknown Source)
   at readFile.read(readFile.java:35)
   at readFile.main(readFile.java:90)

我的代码:

import java.io.*;

import java.util.*;

//import java.lang.*;

public class readFile {

    private Scanner x;
    public String[][] a;
    public String temp;
    public int surahNumber;

    public void openFile()
    {
        try{
            x  = new Scanner(new File("C:\\en.ahmedali.txt"));
            a = new String[500][1000];
        }
        catch(Exception e){
            System.out.println("File Not Found");
        }

    }

    public void read()
    {

        int i = 1;
        int j = 1;
        String xy,tenToninetynie,three_digit,setsurahNumber1,setsurahNumber2,setsurahNumber3;

        while(x.hasNext())
        {
            a[i][j] = x.nextLine();
            temp = a[i][j];
            //System.out.println(temp);
            xy = temp.substring(1, 2);

            char[] charArray = xy.toCharArray();
            //System.out.println(xy);
            tenToninetynie = temp.substring(2, 3);
            char[] charArray1 = tenToninetynie.toCharArray();

            three_digit = temp.substring(3, 4);
            char[] charArray2 = three_digit.toCharArray();

            setsurahNumber1 = temp.substring(0, 1);
            setsurahNumber2 = temp.substring(0, 2);
            setsurahNumber3 = temp.substring(0, 3);

            if(charArray[0] == '|'){
                surahNumber = Integer.parseInt(setsurahNumber1);
                //System.out.println(surahNumber);
                if(surahNumber == i+1){
                    i++;
                    j = 0;
                }               
            }
            else if(charArray1[0] == '|'){
                surahNumber = Integer.parseInt(setsurahNumber2);
                //System.out.println(surahNumber);
                if(surahNumber == i+1){
                    i++;
                    j = 0;

                }
            }
            else if(charArray2[0] == '|'){
                surahNumber = Integer.parseInt(setsurahNumber3);
                //System.out.println(surahNumber);
                if(surahNumber == i+1){
                    //System.out.println("I See");
                    i++;
                    j = 0;              
                }
            }
            j++;
            //System.out.println(j);
            //break;

        }
    }
    void write()
    {
        System.out.println(a[75][1]);
    }

    public static void main(String args[])
    {
        readFile y = new readFile();
        y.openFile();
        y.read();
        y.write();
        //System.out.println(y.a[75][1]);
    }


}

【问题讨论】:

  • 那么你输入了什么值?大概是一个字符,这意味着当您要求更多时,子字符串 失败...
  • 第 35 行是哪一行?
  • xy = temp.substring(1, 2);
  • 从文件中获取值....... xy = temp.substring(1, 2); //第 35 行
  • 您绝对应该添加对字符串长度的检查,例如if( temp.length() >= 4),否则每个空行或少于 4 个字符的行都会在您的代码中产生异常。

标签: java string java.util.scanner


【解决方案1】:

您的 en.ahmedali.txt 文件包含什么,可能它包含一些换行符并且您正在尝试使用索引使用子字符串,而它不包含任何内容,因此您必须在调用 subString 之前先检查字符串的长度。

【讨论】:

  • 该文件包含 1|1|asdaskhdkj 1|2|asdaszxc 1|3|jxocvjxcjv 2|1|jojvkcxvn 2|2|joxzczxcz 3|1|bcxzjicjzkxbckjzxc 这些类型的行..... ...
  • 1|1|asdaskhdkj 1|2|asdaszxc 1|3|jxocvjxcjv 2|1|jojvkcxvn 2|2|joxzczxcz 3|1|bcxzjicjzkxbckjzxc 这些类型的行...
  • 如前所述,在使用 subString 之前,您需要检查字符串索引是否存在,这样可以解决问题。
  • 抱歉回复晚了............我已经解决了它在子字符串之前检查长度......谢谢大家的帮助......
猜你喜欢
  • 1970-01-01
  • 2019-11-16
  • 2023-04-05
  • 2016-08-21
  • 2014-07-04
  • 2020-06-06
  • 2018-12-26
  • 2021-03-05
  • 2013-07-13
相关资源
最近更新 更多