0

文字列を含む行を印刷したいファイルがあります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);
        }

    }
}

私のコードは、その文字列を含む行番号として 2 を出力していますが、文字列は実際には 3 行目にあります。これが私のファイルのサンプルです。

jhsdjshdsjhdjs
sdkjsdkjskdjskjd
AjhsdjhsdjhA/C NO: jhsdjhsdjssdlk

明らかに、これがより大きなファイルまたはファイルのグループを読み取ることを信頼していません。これを行う最善の方法は何ですか?

4

3 に答える 3

2

配列のインデックスと同様に、行番号は 0 から始まります。1 ずつ増やすと正しい答えが得られます。

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

pre-increment 演算子は、出力するnum前に変数を 1 ずつインクリメントするため、目的の結果が得られます。

于 2013-10-29T07:40:06.510 に答える
1

LineNumberReaderは 0 から始まるため、期待される結果を得るには 1 を増やします。

ドキュメントから:

デフォルトでは、行番号は 0 から始まります。この番号は、データが読み取られるたびに行終端記号で増加し、setLineNumber(int) を呼び出すことで変更できます。ただし、setLineNumber(int) は実際にはストリーム内の現在の位置を変更しないことに注意してください。getLineNumber() によって返される値のみを変更します。

したがって、期待される結果を得るには2つの方法があります。

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.
于 2013-10-29T07:40:54.850 に答える