如果找到一些字符串,则跳过一行文件

时间:2015-02-03 13:41:44

标签: java bufferedreader skip indexoutofrangeexception

我正在使用Java扫描文本文件并使用Buffered Reader逐行读取。 我的第60到第80位有一些文字。 根据这个位置的文字,我需要决定是否跳过 该行或从同一行读取一些数据。在这种情况下,如果我找到“END OF HEADER”,我需要跳过该行。 我在这里使用了80的bufferedreader.skip(line.lenght()),  跳过那一行然后转到下一行 行读取一些文本,但它再次给出字符串超出范围的异常。

streamObs = new FileInputStream(obsFile);
inStreamObs = new InputStreamReader(streamObs);
buffStreamObs = new BufferedReader(inStreamObs);
BufferedReader in = new BufferedReader(new FileReader(obsFile));
String line="";
while((line = in.readLine()) != null)
{
  String typeField=line.substring(Math.min(line.length(),60),line.length());
  //System.out.println(typeField);
  typeField=typeField.trim();
  if (typeField.equals("RINEX VERSION / TYPE")) {
    System.out.println(" Current version:"+line.substring(5,9));
  }
  if (typeField.endsWith("TIME OF FIRST OBS")){
    System.out.println("Time of First Observation:"+ line.substring(2,44));
  }
  if (typeField.equals("END OF HEADER"))
  {
    in.skip(80);

  }
  System.out.println(line.substring(Math.min(line.length(),30),32));

}

2 个答案:

答案 0 :(得分:1)

为了跳过某些循环迭代,您需要使用continue;

答案 1 :(得分:0)

老兄,什么也不做 in.readLine()触发一个迭代器,它在调用方法后将其索引设置为下一行。它返回迭代器所在的行,并将1添加到迭代器索引。

if (! typeField.equals("END OF HEADER"))
 {
 if (typeField.equals("RINEX VERSION / TYPE")) {
  System.out.println(" Current version:"+line.substring(5,9));
 }
 if (typeField.endsWith("TIME OF FIRST OBS")){
  System.out.println("Time of First Observation:"+ line.substring(2,44));
 }
  System.out.println(line.substring(Math.min(line.length(),30),32));
}
顺便说一句,不要使用像这样的修复值。定义私有最终字段或使用getter和setter来获取和/或更改值。 30,32,2,45,5和9不应该是硬编码的数字