如果文件包含某些字符串,则从文件中打印出一行

时间:2013-10-29 07:34:33

标签: java string file

我有一个文件要打印出包含字符串A/C NO:

的行
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.io.LineNumberReader;
import org.apache.commons.io.FileUtils;
public class TestFndString {
    public static void main(String[] args) throws IOException {
        String str1 = FileUtils.readFileToString(new File("C:/Testing.txt"));
        LineNumberReader lnr = new LineNumberReader(new FileReader(new File("C:/Testing.txt")));
        lnr.skip(Long.MAX_VALUE);
        if (str1.contains("A/C NO:")) {
            int num = lnr.getLineNumber();
            System.out.println(num);
        }

    }
}

My Code is Printing 2作为包含该String的行号,而String实际上在第3行。这是My File示例:

jhsdjshdsjhdjs
sdkjsdkjskdjskjd
AjhsdjhsdjhA/C NO: jhsdjhsdjssdlk

显然,我不相信这会读取更大的文件或一组文件。这样做的最佳方式是什么?

3 个答案:

答案 0 :(得分:2)

与数组索引一样,行编号从0开始。用一个增加它将为您提供正确的答案。

if (str1.contains("A/C NO:")) {
     int num = lnr.getLineNumber();
     System.out.println( ++num ); // see the increment using ++ ?
}  

预增量运算符会在打印之前将num变量递增1,因此您将获得所需的结果。

答案 1 :(得分:1)

行编号从0开始。只需在得到的结果中加1(只需查看JavaDoc)。或者在创建setLineNumber(1)后调用LineNumberReader

LineNumberReader lnr = new LineNumberReader(new FileReader(new File("C:/Testing.txt")));
lnr.setLineNumber(1);

答案 2 :(得分:1)

LineNumberReader从0开始,因此预期结果增加1。

来自DOCS

  

默认情况下,行号从0开始。此数字递增为   每个行终止符作为数据被读取,并且可以用a来改变   调用setLineNumber(int)。但请注意,setLineNumber(int)可以   实际上并没有改变流中的当前位置;它只是   更改getLineNumber()返回的值。

所以有两种方法可以获得预期的结果:

1. 

LineNumberReader lnr = new 
                  LineNumberReader(new FileReader(new File("C:/Testing.txt")));        
    if (str1.contains("A/C NO:")) {
        int num = lnr.getLineNumber();
        System.out.println(num+1);
    }




2.  OR you can use setLineNumber(int) as mentioned in java docs.