java.lang.StringIndexOutOfBoundsException:异常
我试图读取一个日志文件,并试图打印特定日期之间的所有日志,但当我试图从日志中检索日期时,最终出现了此异常。 这是我的代码,它实际上正在打印一些日志消息java.lang.StringIndexOutOfBoundsException:异常,java,string,indexoutofboundsexception,Java,String,Indexoutofboundsexception,我试图读取一个日志文件,并试图打印特定日期之间的所有日志,但当我试图从日志中检索日期时,最终出现了此异常。 这是我的代码,它实际上正在打印一些日志消息 public class Teat { public static void main(String[] args) throws Exception { // TODO Auto-generated method stub { // TODO Auto-generated method stub
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();
}
}
}
}
是的,那条线的价值是多少Jigar Joshi 3分钟前编辑
值为2013年12月12日-19秒前用户3117965
2013年12月12日
长度为11个字符String
因此最后一个字符位于位置10(第一个字符位于索引0处),访问第11个元素将使您出界,因此出现异常
是的,那条线的价值是多少Jigar Joshi 3分钟前编辑
值为2013年12月12日-19秒前用户3117965
2013年12月12日
长度为11个字符字符串
因此最后一个字符位于位置10(第一个字符位于0索引),访问第11个元素将使您超出范围,因此异常更改whlie((sCurrentLine=br.readLine())!=null)
而不是do while
否则将以NullPointerException
结束
并在处理前检查是否(sCurrentLinet.isEmpty()&&sCurrentLinet.length()>=11)
。更改whlie((sCurrentLine=br.readLine())!=null)
而不是while
否则将以NullPointerException
结束
Sub_string.add(sCurrentLine.substring(0, 11));
并在处理前检查是否(sCurrentLinet.isEmpty()&&sCurrentLinet.length()>=11)
Sub_string.add(sCurrentLine.substring(0, 11));
这是一个问题。在调用子字符串(开始、结束)
函数之前添加检查
if (sCurrentLine != null && end>= start && end <= sCurrentLine.length())
if(sCurrentLine!=null&&end>=start&&end
正在给出问题。请在调用子字符串(开始、结束)
函数之前添加检查
if (sCurrentLine != null && end>= start && end <= sCurrentLine.length())
如果(sCurrentLine!=null&&end>=start&&end您是否检查日志中的所有行是否至少有11个字符长?如果您的案例中有任何行少于11个字符,您将获得StringOutOfBoundsException。
另外,请根据@Prabhakaran的建议更改代码。是否检查日志中的所有行是否至少有11个字符长?如果您的案例中有任何行少于11个字符,您将获得StringOutOfBoundsException。
另外,请根据@Prabhakaran的建议更改您的代码。Sub_string.add(sCurrentLine.substring(0,11));
这里的sCurrentLine
值是多少?我从日志文件中读取的那一行,是的,那一行的值是多少?值是2013年12月12日,为什么不使用regex?Sub_string.add(sCurrentLine.子串(0,11))
这里的sCurrentLine的值是多少?我从日志文件中读到的那一行,是的,那一行的值是多少?值是2013年12月12日,为什么不使用regex呢?字符串的大小大约是100+,但我还是遇到了同样的问题。这在某些情况下可能是好的,但当它是您提到的值时,它将l失败,异常停止程序在此未处理的情况下继续运行字符串的大小约为100+,但我仍然遇到相同的问题。在某些情况下,它可能是好的,但当它是您提到的值时,它将失败,异常停止程序在此未处理的情况下继续运行。这实际上是日志文件的问题不管怎么说,格式都很感谢伙计们。事实上,日志文件格式有问题。不管怎么说,谢谢伙计们