从特定行读取数据并从第n行计算单词以在该行上打印第n个单词

时间:2013-11-27 17:03:07

标签: java

我有这个程序读取文本文件。我需要从中获取一些数据。 文本文件如下所示:

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 + ",");
}

3 个答案:

答案 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)

如果我正确阅读,您正在使用BufferedReaderScanner混合两个不同的读者,这样您就不会将结果从一个改为另一个(一个)并没有指向与另一个相同的位置)。您已经在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);
        }
    }