我有一个文件要打印出包含字符串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
显然,我不相信这会读取更大的文件或一组文件。这样做的最佳方式是什么?
答案 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.