如何读取文本文件中的特定行并返回其中的一部分?

时间:2014-03-22 14:19:53

标签: java parsing text bufferedreader

我在一个文件中有几个字符串,我应该停止并从这些字符串中读取值。例如:

This is the first line
#1 stop = 300
This is the third line
This is the 4th line
#2 stop = 400
This is the 6th line

我需要在#1处停下并从那里提取值300。然后我必须停在#2并提取400,依此类推。

我对Java非常陌生,无法弄清楚我的代码有什么问题。 (我还没有提取价值):

public static void main(String[] args) throws IOException { 
        //read
        File fromFile = new File("in.txt");         
        BufferedReader bufferedReader = new BufferedReader(new FileReader(fromFile));
        String line;
        String firstHandler="";
        while ((line = bufferedReader.readLine()) != null) { 
            bufferedReader.readLine();       
            if (firstHandler.startsWith("#1")){
                System.out.println(firstHandler);
                String[] parts = firstHandler.split("=");   
                System.out.println(Arrays.toString(parts));  
             } 
                 break;
        }

        System.out.println(line);
         bufferedReader.close();
    }
}

此时它只打印第一行,这根本不是我需要的。任何人都可以向我解释如何以正确的方式做到这一点吗?

2 个答案:

答案 0 :(得分:3)

错误在以下四行中:

    String firstHandler="";
    while ((line = bufferedReader.readLine()) != null) { 
        bufferedReader.readLine();      
        if (firstHandler.startsWith("#1")){

您从while语句中读取了一行。对于每行读取,您输入块。但在这个区块内,你还读到了另一条线。

然后,您与"#1"进行比较的不是您刚读过的行,而是firstHandler,它被初始化为空字符串一次,并且从未修改过。代码应该是:

    while ((line = bufferedReader.readLine()) != null) { 
        if (line.startsWith("#1")) {

reader也应在finally块中关闭,但这是另一回事。

答案 1 :(得分:2)

首先,正如评论中所指出的,你需要匹配以#开头的行,因为有多行以#开头但是有不同的第二个字符。

接下来,您需要检查您正在阅读的行的值以检查#字符。因此,您可以删除firstHandler变量并使用line变量。

最后,你需要摆脱break语句,因为这会导致循环在第一行本身之后退出。这就是你只能在屏幕上看到第一行的原因。

因此,您的代码可以更改为:

while ((line = bufferedReader.readLine()) != null) 
        {                
         if (line.startsWith("#"))
           {
            System.out.println(line);
            String[] parts = line.split("=");   
            System.out.println(Arrays.toString(parts));  
           } 
         }