我正在尝试读取日志文件并尝试在某些日期之间打印所有日志,但是当我尝试从日志中检索日期时,我最终得到此异常。 这是我的代码,它实际上是打印一些日志消息
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)
答案 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的建议更改您的代码。