从文件中获取数字并对其进行排序

时间:2014-03-05 23:42:32

标签: java arrays string file filereader

我需要让我的程序读取一个文件,然后取出字符串中的数字并将它们排序成一个数组。我可以让我的程序读取文件并将其放到一个字符串中,但这就是我被困住的地方。所有数字都在文件的不同行上,但在字符串中显示为一个长数字。这就是我到目前为止所做的:

public static void main(String[] args) {

    String ipt1;
    Scanner fileInput;
    File inFile = new File("input1.dat");

    try {
        fileInput = new Scanner(inFile);
        //Reads file contents
        while (fileInput.hasNext()) {
            ipt1 = fileInput.next();
            System.out.print(ipt1);
        }
        fileInput.close();
    }   
    catch (FileNotFoundException e) {
        System.out.println(e);
    }
}

3 个答案:

答案 0 :(得分:2)

我建议使用fileInput.nextInt()或您想要的任何类型将数值作为数字类型读取,将它们放在数组中并使用内置排序(如Arrays.sort)。除非我错过了关于这个问题的更微妙的观点。

答案 1 :(得分:0)

如果您的任务只是从某个文件获取输入并且您确定该文件具有整数,请使用ArrayList。

import java.util.*;
Scanner fileInput;
ArrayList<Double>ipt1 = new ArrayList<Double>();
File inFile = new File("input1.dat");

try {
    fileInput = new Scanner(inFile);
    //Reads file contents
while (fileInput.hasNext()){
    ipt1.add(fileInput.nextDouble()); //Adds the next Double to the ArrayList
    System.out.print(ipt1.get(ipt1.size()-1)); //Prints out what you just got.
}
fileInput.close();

}   
catch (FileNotFoundException e){
    System.out.println(e);
}

//Sorting time
//This uses the built-in Array sorting.
Collections.sort(ipt1);

但是,如果您最终需要提供一个简单的数组,但CAN使用ArrayLists,您可以添加以下内容:

Double actualResult[] = new Double[ipt1.size()]; //Declare array
for(int i = 0; i < ipt1.size(); ++i){
    actualResult[i] = ipt1.get(i);
}



Arrays.sort(actualResult[]);

答案 2 :(得分:0)

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.time.LocalDateTime;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
import java.util.stream.Collectors;
public class SortNumberFromFile {
    public static void main(String[] args) throws IOException {
        BufferedReader br = null;
        try {
            System.out.println("Started at " + LocalDateTime.now());
            br = new BufferedReader(new FileReader("/folder/fileName.csv"));//Read data from file named /folder/fileName.csv
            List<Long> collect = br.lines().mapToLong(a -> Long.parseLong(a)).boxed().collect(Collectors.toList());//Collect all read data in list object
            Collections.sort(collect);//Sort the data
            writeRecordsToFile(collect, "/folder/fileName.txt");//Write sorted data to file named /folder/fileName.txt
            System.out.println("Ended at " + LocalDateTime.now());
        }
        finally {
            br.close();
        }
    }
    public static <T> void writeRecordsToFile(Collection<? extends T> items, String filePath) {
        BufferedWriter writer = null;
        File file = new File(filePath);
        try {
            if(!file.exists()) {
                file.getParentFile().mkdirs();
                file.createNewFile();
            }
            writer = new BufferedWriter(new FileWriter(filePath, true));
            if(items != null && items.size() > 0) {
                for(T eachItem : items) {
                    if(eachItem != null) {
                        writer.write(eachItem.toString());
                        writer.newLine();
                    }
                }
            }
        } catch (IOException ex) {
        }finally {
            try {
                writer.close();
            } catch (IOException e) {
            }
        }
    }
}