7

2 つの異なる言語の 2 つのテキストファイルがあり、行ごとに配置されています。つまり、textfile1 の最初の行は textfile2 の最初の行と同じにする必要があります。

両方のファイルを 1 行ずつ同時に読み取る方法はありますか?

以下は、ファイルがどのように見えるかのサンプルです。ファイルあたりの行数が約 1,000,000 であると想像してください。

テキストファイル1:

This is a the first line in English
This is a the 2nd line in English
This is a the third line in English

テキストファイル 2:

C'est la première ligne en Français
C'est la deuxième ligne en Français
C'est la troisième ligne en Français

希望の出力

This is a the first line in English\tC'est la première ligne en Français
This is a the 2nd line in English\tC'est la deuxième ligne en Français
This is a the third line in English\tC'est la troisième ligne en Français

現在、これを使用できますが、RAM に数百万行を保存すると、マシンが停止します。

String english = "/home/path-to-file/english";
String french = "/home/path-to-file/french";
BufferedReader enBr = new BufferedReader(new FileReader(english));
BufferedReader frBr = new BufferedReader(new FileReader(french));

ArrayList<String> enFile = new ArrayList<String>();
while ((line = enBr.readLine()) != null) {
    enFile.add(line);
}

int index = 0;
while ((line = frBr.readLine()) != null) {
    String enSentence = enFile.get(index);
    System.out.println(line + "\t" + enSentence);
    index++;
}
4

2 に答える 2

10

nextLine同じループ内の両方のリーダーに呼び出しを入れます。

String english = "/home/path-to-file/english";
String french = "/home/path-to-file/french";
BufferedReader enBr = new BufferedReader(new FileReader(english));
BufferedReader frBr = new BufferedReader(new FileReader(french));

while (true) {
    String partOne = enBr.readLine();
    String partTwo = frBr.readLine();

    if (partOne == null || partTwo == null)
        break;

    System.out.println(partOne + "\t" + partTwo);
}
于 2012-05-31T09:40:45.207 に答える
2

これは私がそれを行う方法です:

List<String> strings = new ArrayList<String>();
BufferedReader enBr = ...
BufferedReader frBr = ...

String english = "";
String french = "";
while (((english = enBr.readline()) != null) && ((french = frBr.readline) != null))
{
    strings.add(english + "\t" + french);
}
于 2012-05-31T09:44:30.670 に答える