3

私はテキストファイルを読むためのコンパイラプログラムを書いています。テキストファイルのコマンドの中には、テキストファイルの特定の行に戻ってそこから読み取るように指示するものがあります。実は、私が持っているこのコードは、ドキュメントの最後まで一度に1行ずつ読み取ります。とにかく、パーサーにテキストファイルの特定の行にスキップバックまたはフォワードさせる方法はありますか?たとえば、私は現在8行目にいて、指示は戻って4行目を読むことだとしましょう。

これがファイルを解析するための私のコードです。

try {
    FileInputStream fstream = new FileInputStream("compilers.txt");
    BufferedReader br = new BufferedReader(new InputStreamReader(fstream));
    String strLine;

    while ((strLine = br.readLine()) != null && checker == false) {
        // rest of code in here
    }
    in.close();
}
4

2 に答える 2

2

ストリームmark()reset()関数がありますが、sを使用すると失敗する可能性がありBufferedStreamます。ファイル全体をArrayList、各行に1つのエントリに読み込む方がよいでしょう。

ArrayListの例:

List<String> lines = new ArrayList<String>();
while ((strLine = br.readLine()) != null) {
    lines.add(strLine);
}

// later get line by:
// first line has index 0    
String line = lines.get(8);  
于 2012-12-12T18:27:12.280 に答える
1

あなたはこれを行うことができますMap

HashMap<Integer, String>

キーはあなたの行番号であり、値はあなたの行です。したがって、必要に応じて行番号ごとに行を取得できます。

Map<Integer, String> lineMap = new HashMap<Integer, String>();
int i = 1;
while ((strLine = br.readLine()) != null && !checker) {
    lineMap.put(i, strLine);
    // do what you want
    // if you are in line 8 (i=8)
    // get my line 4 (lineMap.get(4))
    i++;
}
于 2012-12-12T18:31:03.267 に答える