读取文件的行并进行比较

时间:2015-06-04 20:33:30

标签: file text compare

我正在尝试实现一些代码来比较两个文本文件中的行,并确定它们是相同还是不同。但是,我的逻辑似乎不适用于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) {

2 个答案:

答案 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");