我有两种不同语言的文本文件,它们是逐行对齐的。即textfile1中的第一行应该等于textfile2中的第一行,依此类推。依次类推。
有没有办法同时逐行读取这两个文件?
以下是文件应如何显示的示例,假设每个文件的行数约为1,000,000。
textfile1:
This is a the first line in English
This is a the 2nd line in English
This is a the third line in English
textfile2:
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++;
}
答案 0 :(得分:9)
在两个读者的同一个循环中调用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);
}
答案 1 :(得分:1)
我就是这样做的:
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);
}