0

"ua, "プログラムの一部で、処理したい行数を含む行を読み取り、それらを同じ数に設定しています。配列を使用して、必要な数の行に柔軟に対応したいと考えています。

これは、4行で動作する方法です

複数のelse ifステートメントを使用する代わりに、これを単純化して、処理したい行数を定義でき、この部分を編集する必要がないようにしたい

try (BufferedReader br = new BufferedReader(new FileReader(f.getAbsolutePath()))) {

    String line1 = null, line2 = null, line3 = null, line4 = null, line = null;
    boolean firstLineMet = false;
    boolean secondLineMet = false;
    boolean thirdLineMet = false;

    while ((line = br.readLine()) != null) {
        if (line.contains("ua, ")) {

            if (!firstLineMet) {
                line1 = line;
                firstLineMet = true;
            } else if (!secondLineMet) {
                line2 = line;
                secondLineMet = true;
            } else if (!thirdLineMet) {
                line3 = line;
                thirdLineMet = true;
            } else {
                line4 = line;
                ProcessLines(uaCount, line1, line2, line3, line4);
                line1 = line2;
                line2 = line3;
                line3 = line4;
            }
        }
    }
}
4

2 に答える 2

1

目標を達成するために次の方法で実行できる代替手段。

int counter = 0;
int limit = 3; // set your limit
String[] lines = new String[limit];
boolean[] lineMet = new boolean[limit];

while ((line = br.readLine()) != null) {
    if (line.contains("ua, ")) {
        lines[counter] = line;
        lineMet[counter] = true; // doesn't make any sense, however
        counter++;
    }
    if (counter == limit){
    // tweak counter otherwise previous if will replace those lines with new ones
        counter = 0; 
        ProcessLines(uaCount, lines); // send whole array 
        lines[0] = lines[1]; // replace first line with second line
        lines[1] = lines[2]; // replace second line with third line
        lines[2] = lines[3]; // replace third line with fourth line

        // ProcessLines(uaCount, lines[0], lines[1], lines[2], lines[3]);
        // Do Something
    }
}

これがお役に立てば幸いです。

于 2013-04-02T18:56:22.753 に答える
0

メモリ内のファイル全体の読み取りに問題がないと仮定すると、 によって提供される便利なメソッドを使用できますFiles

List<String> lines = Files.readAllLines(yourFile, charset);
ProcessLines(uaCount, lines.get(0), lines.get(1), ...);

または、行を順番に処理したいが、特定の制限までしか処理しない場合:

for (int i = 0; i < limit && i < lines.length(); i++) {
    processLine(lines.get(i));
}
于 2013-04-02T18:11:24.460 に答える