【问题标题】:file combiner not obtaining same outputs文件组合器没有获得相同的输出
【发布时间】:2017-12-10 14:10:24
【问题描述】:

我正在尝试制作一个程序,在从一个文件中删除它们的重复项后合并 2 个文本文件(我有 2 个问题和答案列表,并希望从两个文件中获取所有问题)但是当我使用以下编码的问题不会像以前那样保持排序,以根据行对应答案。

import java.util.Scanner;
import java.io.File;
import java.util.List;
import java.util.LinkedList;
import java.nio.file.Files.*;
import java.nio.file.Paths;
import java.nio.file.*;
import java.util.Set;
import java.util.HashSet;
import java.nio.charset.Charset;

class Main{

    public static List fileToList(String path){

        Scanner scanner = openFile(path);
        List<String> list = loadFile(scanner);
        closeFile(scanner);

        return list;
    }

    public static Scanner openFile(String path){ 

        Scanner scanner = null;

        try{    
            scanner = new Scanner(new File(path),"ISO-8859-1"); 

        }catch(Exception e){ e.printStackTrace(); }

        return scanner;
    }

    public static List loadFile(Scanner scanner){

        List<String> list = new LinkedList<String>();

        while(scanner.hasNextLine()){
            list.add(scanner.nextLine());
        }

        return list;
    }

    public static void closeFile(Scanner scanner){
        scanner.close();
    }

    public static Set fileCombiner(List<String> list1 , List<String> list2){

        for(int i = 0; i < list1.size(); i++){
            for(int c = 0; c < list2.size(); c++){

                if(list1.get(i).equals(list2.get(c))){

                    if(list1.size() > list2.size())
                        list1.remove(i);
                    else
                        list2.remove(c);
                }

            }
        }

        //COMBINING TRIMMED FILES

        Set<String> set1 = null;

        if(list1.size() > list2.size()){
            list1.addAll(list2);
            set1 = new HashSet<String>(list1);
        }
        else{
            list2.addAll(list1);
            set1 = new HashSet<String>(list2);
        }


        return set1;
    }

    public static void main(String args[]){

        Scanner input = new Scanner(System.in);

        System.out.print("Enter name of file 1: ");
        String name1 = input.next();

        System.out.print("Enter name of file 2: ");
        String name2 = input.next();

        String path1 = name1 + ".txt";
        String path2 = name2 + ".txt";

        List<String> list1 = fileToList(path1);
        List<String> list2 = fileToList(path2);

        Set set1 = fileCombiner(list1,list2);

        Charset ISO_8859_1 = Charset.forName("ISO-8859-1");

        try{
            Files.write(Paths.get("GENERATED.txt"),set1,ISO_8859_1);
        }catch(Exception e){}

    }
}

【问题讨论】:

    标签: java file makefile


    【解决方案1】:

    HashSet 中的元素可以乱序排列。
    使用 LinkedHashSet 而不是 HashSet,因为此类保持插入顺序。

    另请参阅:
    https://docs.oracle.com/javase/6/docs/api/java/util/LinkedHashSet.html

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-01
      • 1970-01-01
      • 2020-12-03
      • 1970-01-01
      • 1970-01-01
      • 2015-09-17
      相关资源
      最近更新 更多