首页 > 解决方案 > 比较两个文本文件并在java中显示唯一的单词

问题描述

我有两个文本文件。我必须开发一个 java 程序来比较这两个文件并找到唯一的单词。我尝试了几种方法,但没有奏效。例子:

测试1.txt:

I am a robot. My name is Sofia.

测试2.txt:

Hello  I am a man. My name is Alex

输出:

Hello robot man Sofia Alex

我的做法是这样的:

import java.io.*;
import java.util.*;

public class Main {
    public static void main(String[] args)
            throws FileNotFoundException {
        Scanner input = new Scanner(new File("test1.txt"));
        Scanner scan = new Scanner(new File("test2.txt"));

        ArrayList<String> al = new ArrayList<String>();
        ArrayList<String> a2 = new ArrayList<String>();
         String test;

        while (input.hasNext()) {
            String next = input.next();


           }
         System.out.println("arraylist" + al);

        while (scan.hasNext()) {

                test = scan.next();
               a2.add(test);

           }
         System.out.println("arraylist2" + a2);

    for( int i = 0; i < al.size(); i++){
      for(int j = 0; j < a2.size(); j++){
            if(al.get(i).equals(a2.get(j))){
          break;}
          else{
          System.out.println(al.get(i));break;
          }
    }
    }    

}
}

标签: java

解决方案


请注意,这是一种快速而肮脏的方法,而且效率很低。此外,我不知道您的确切要求(句号?大写/小写?)。

还要考虑到这个程序不会检查哪个列表更长。但这应该给你一个很好的提示:

import java.io.File;
import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.Scanner;

public class Main {

    public static void main(String[] args) throws FileNotFoundException {
        Scanner input = new Scanner(new File("test1.txt"));
        Scanner scan = new Scanner(new File("test2.txt"));

        ArrayList<String> list1 = new ArrayList<String>();
        ArrayList<String> list2 = new ArrayList<String>();

        while (input.hasNext()) {
            list1.add(input.next());
        }

        while (scan.hasNext()) {
            list2.add(scan.next());
        }

        // iterate over list 1
        for (int i = list1.size() - 1; i >= 0; i--) {
            // if there is a occurence of two identical strings
            if (list2.contains(list1.get(i))) {
                // remove the String from list 2
                list2.remove(list2.indexOf(list1.get(i)));
                // remove the String from list 1
                list1.remove(i);
            }
        }

        // merge the lists
        list1.addAll(list2);

        // remove full stops
        for (int i = 0; i < list1.size(); i++) {
            list1.set(i, list1.get(i).replace(".", ""));
        }
        System.out.println("Unique Values: " + list1);
    }

}

推荐阅读