java.lang.StringIndexOutOfBoundsException:异常

时间:2013-12-19 06:09:55

标签: java string indexoutofboundsexception

我正在尝试读取日志文件并尝试在某些日期之间打印所有日志,但是当我尝试从日志中检索日期时,我最终得到此异常。 这是我的代码,它实际上是打印一些日志消息

public class Teat {


public static void main(String[] args) throws Exception {
    // TODO Auto-generated method stub
    {
        // TODO Auto-generated method stub
        SimpleDateFormat formatter = new SimpleDateFormat("dd MMM yyyy");
        BufferedReader br = new BufferedReader(new FileReader(
                "C:\\log.log"));
        String sCurrentLine;
        try {
            String startDate = "12 Dec 2013";
            String endDate = "12 Dec 2013";

            Date dateStart = formatter.parse(startDate);
            Date dateEnd = formatter.parse(endDate);
            Date logDate = null;
            int sDay = dateStart.getDate();
            int sMonth = dateStart.getMonth();
            int sYear = dateStart.getYear();
            int eDay = dateEnd.getDate();
            int eMonth = dateEnd.getMonth();
            int eYear = dateEnd.getYear();
            String date;
            int i=0;
              ArrayList<String> Sub_string = new ArrayList<String>();
            do {
                sCurrentLine = br.readLine();
                Sub_string.add(sCurrentLine.substring(0, 11));

                logDate = formatter.parse(Sub_string.get(i));
                int lDay = logDate.getDate();
                int lMonth = logDate.getMonth();
                int lYear = logDate.getYear();
                if (lYear >= sYear && lYear <= eYear) 
                {
                    if (lMonth >= sMonth && lMonth <= eMonth)

                    {
                        if (lDay >= sDay && lDay <= eDay) {
                            System.out.println(sCurrentLine);
                        }
                    }
                }
                else{System.out.println("pls ented valid dates");}
                i++;
            }while(sCurrentLine!=null);
        }

        catch (ParseException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }

    }
}

}

错误是

 Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index 
out of range: 11
    at java.lang.String.substring(Unknown Source)
    at Teat.main(Teat.java:41)

4 个答案:

答案 0 :(得分:2)

  

是的那条线的价值是多少? - Jigar Joshi 3分钟前编辑
  该值是12 Dec 2013 - user3117965 19秒前

12 Dec 2013长度为11个字符String,因此最后一个字符位于第10个位置(第一个字符位于0索引处),访问第11个元素将使您超出范围,因此异常< / p>

答案 1 :(得分:2)

更改whlie((sCurrentLine = br.readLine())!=null)而不是do while,否则您将以NullPointerException结束。

并在处理之前检查if(sCurrentLinet.isEmpty()&&sCurrentLinet.length()>=11)

答案 2 :(得分:1)

Sub_string.add(sCurrentLine.substring(0, 11));

正在给出问题。在调用substring(start, end)函数

之前添加一项检查
if (sCurrentLine != null && end>= start && end <= sCurrentLine.length())

答案 3 :(得分:1)

您是否检查过日志中的所有行是否至少包含11个字符?如果您的案例中任何行少于11个字符,您将获得StringOutOfBoundsException。 另请根据@Prabhakaran的建议更改您的代码。