FileInputStream fstream = new FileInputStream("data.txt");
// Get the object of DataInputStream
DataInputStream in = new DataInputStream(fstream);
BufferedReader br = new BufferedReader(new InputStreamReader(in));
String strLine;
//Read File Line By Line
while ((strLine = br.readLine()) != null)
{
//Test if it is a line we need
if(strLine.charAt(0) != ' ' && strLine.charAt(5) == ' '
&& strLine.charAt(10) == ' ' && strLine.charAt(15) == ' '
&& strLine.charAt(20) == ' ' && strLine.charAt(25) == ' ' )
{
System.out.println (strLine);
}
}
我正在读取一个带有空白行(不仅是空格)的文件,并比较某些索引处的字符以查看是否需要该行,但是当我读入一行空格时,我得到的字符串索引超出范围。
答案 0 :(得分:2)
如果该行的长度为0,并且您正在尝试确定位置10处的字符,例如您将获得异常。在处理之前,只需检查该行是否不是所有空格。
if (line != null && line.trim().length() > 0)
{
//process this line
}
答案 1 :(得分:0)
空行不会为空,而是空字符串''。如果您尝试读取索引0处的字符,它将会中断。
while ((strLine = br.readLine()) != null)
{
//remove whitespace infront and after contents of line.
strLine = strLine.trim();
if (strLine.equals(""))
continue;
//check that string has at least 25 characters when trimmed.
if (strLine.length() <25)
continue;
//Test if it is a line we need
if(strLine.charAt(0) != ' ' && strLine.charAt(5) == ' ' && strLine.charAt(10) == ' ' && strLine.charAt(15) == ' ' && strLine.charAt(20) == ' ' && strLine.charAt(25) == ' ' )
{
System.out.println (strLine);
}
}
您也可以尝试使用Java Scanner类。它对于阅读文件非常有用。
答案 2 :(得分:0)
你在这里做的是使用strLine.charAt(25)
检查章程直到第25个字符,而你的String strLine
可能没有那么多字符。如果charAt(int index)
参数不小于此字符串的长度,IndexOutOfBoundsException
方法将抛出index
。
您可以通过调用strLine
找到strLine.length()
的长度,然后检查charAt()
从0
到strLine.length() - 1
,您将看不到该异常。