我正在用Java扫描一个文本文件,并使用缓冲阅读器逐行读取它。我有一些文本在第 60 到 80 位。根据这个位置的文本,我需要决定是否跳过该行或从同一行读取一些数据。在这种情况下,如果我找到"标题结尾",我需要跳过该行。我在这里使用了 bufferedreader.skip(line.lenght()),它是 80, 跳过该行并移至下一行行来读取一些文本,但它再次给出字符串超出范围的异常。
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));
}
为了跳过一些循环迭代,你需要使用continue;
伙计,什么都不做。
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、44、5 和 9 不应是硬编码数字