我正在尝试实现一些代码来比较两个文本文件中的行,并确定它们是相同还是不同。但是,我的逻辑似乎不适用于while语句,因为当其中一个文本文件中有一个额外的行时,我会收到错误。有什么想法我可以改变这个以考虑额外的线?
try {
final File textfile1 = new File("Text1.txt");
final File textfile2 = new File("Text2.txt");
Scanner text1 = new Scanner(textfile1);
Scanner text2 = new Scanner(textfile2);
while (text1.hasNext() || text2.hasNext())
{
line1 = text1.nextLine();
line2 = text2.nextLine();
if (line1.equals(line2))
System.out.println("The lines are equal");
else
System.out.println("\"" + line1 + "\" does not equal \"" + line2 + "\"");
}
text1.close();
text2.close();
} catch (FileNotFoundException ex) {
答案 0 :(得分:1)
它的关键在于评估while (text1.hasNext() || text2.hasNext())
,这意味着两个中的一个不需要在文件的末尾,而是在两者上调用nextLine
。那里的问题再次发生,其中一个可能已经到了终点。
您可以切换为使用&&
代替||
以确保两者都不在最后,或者在搜索之前对每个文件进行评估。
例如......
while (text1.hasNext() || text2.hasNext()) {
line1 = null; line2 = null;
if (text1.hasNext()) line1 = text1.nextLine();
if (text2.hasNext()) line2 = text2.nextLine();
...
答案 1 :(得分:0)
问题在于您的代码会同时读取这两个文本,无论它们是否包含更多内容。 你应该只阅读文本,如果它们都有内容,然后检查一个文本是否比另一个更长。
while (text1.hasNext() && text2.hasNext()){
line1 = text1.nextLine();
line2 = text2.nextLine();
if (line1.equals(line2))
System.out.println("The lines are equal");
else
System.out.println("\"" + line1 + "\" does not equal \"" + line2 + "\"");
}
if (text1.hasNext())
System.out.println("text 1 has more lines");
if (text2.hasNext())
System.out.println("text 2 has more lines");