我有这个程序读取文本文件。我需要从中获取一些数据。 文本文件如下所示:
No. Ret.Time Peak Name Height Area Rel.Area Amount Type
min µS µS*min % mG/L
1 2.98 Fluoride 0.161 0.028 0.72 15.370 BMB
2 3.77 Chloride 28.678 3.784 99.28 2348.830 BMB
Total: 28.839 3.812 100.00 2364.201
我需要从第29行开始阅读,然后从那里获取峰值名称和每种元素的数量,如氟化物,氯化物等。该示例仅显示这两个元素,但其他文本文件将包含更多元素。我知道我需要某种循环来遍历从第29行开始的那些行,这是“1”开始然后是“2”,这将是第30行,依此类推。
我已经尝试过这项工作,但是我想到了一些我想不起的事情,我不确定是什么。这是我的代码。
int lines = 0;
BufferedReader br = new BufferedReader(new FileReader(selectFile.getSelectedFile()));
Scanner sc = new Scanner(new FileReader(selectFile.getSelectedFile()));
String word = null;
while((word =br.readLine()) != null){
lines++;
/*if(lines == 29)
System.out.println(word);*/
if ((lines == 29) && sc.hasNext())
count++;
String value = sc.next();
if (count == 2)
System.out.println(value + ",");
}
答案 0 :(得分:0)
这里有一些代码:
int linesToSkip = 28;
try (BufferedReader br = new BufferedReader(new FileReader(file))) {
String line;
while ( (line = br.readLine()) != null) {
if (linesToSkip-- > 0) {
continue;
}
String[] values = line.split(" +");
int index = 0;
for (String value : values) {
System.out.println("values[" + index + "] = " + value);
index++;
}
}
}
请注意,我已将其包含在try(expr) {}
块中以确保读取器最后关闭,否则您将消耗资源并可能将文件锁定在其他进程中。
我还将您调用word
的变量重命名为line
,以使其更清晰(即表示文件中一行的字符串)。
line.split(" +")
使用正则表达式将String拆分为其组成值。在这种情况下,您的值之间有空格,因此我们使用" +"
表示“一个或多个空格”。我只是通过价值观并打印出来;很明显,你需要做任何你需要做的事情。
我用减少的linesToSkip
变量替换了行数。代码更少,更好地解释了您要实现的目标。但是,如果由于某种原因需要行号,请使用该号码,如下所示:
if (++lineCount <= 28) {
continue;
}
答案 1 :(得分:0)
如果我正确阅读,您正在使用BufferedReader
和Scanner
混合两个不同的读者,这样您就不会将结果从一个改为另一个(一个)并没有指向与另一个相同的位置)。您已经在word
中拥有该行,您可以解析它,无需使用Scanner
。只需跳到第29行(lines > 29
),然后逐行解析所需的值。
答案 2 :(得分:0)
您正在阅读该文件两次...尝试这样的事情
int lines = 0;
BufferedReader br = new BufferedReader(new FileReader(selectFile.getSelectedFile()));
String line = null;
while ((line = br.readLine()) != null) {
if (++lines < 29)
continue; //this ignores the line
for(String word : line.split("separator here")) {
// this will iterate over every word on that line
// I think you can take it from here
System.out.println(word);
}
}