在Java中以特殊方式对.txt数据进行排序

时间:2020-11-12 19:10:48

标签: java database sorting txt

我有一个.txt文件,我想排序如下:

GENEBOI INC COM 15893X590   46,741  174,700 SH      DFND    4,11    174,700 0   0
DCHATRA RESTAURATION GROUP INC N    CL A    14771P827   2,659,074   5,213,461   SH      DFND    4,8,11 5,213,461    0   0
FROLAKATZ CO    COM 107393852   35,744  800,000 SH      DFND    4   800,000 0   0

我想对每一行进行排序,其中每一行中的第二个数字对于排序算法来说是唯一重要的事情。我想从最高(例如2,659,074)到最低(例如35,744)对它们进行排序。重要的是,每一行的内容都不应被编辑或与其他行混淆。

因此结果应如下所示:

DCHATRA RESTAURATION GROUP INC N    CL A    14771P827   2,659,074   5,213,461   SH      DFND    4,8,11 5,213,461    0   0
GENEBOI INC COM 15893X590   46,741  174,700 SH      DFND    4,11    174,700 0   0
FROLAKATZ CO    COM 107393852   35,744  800,000 SH      DFND    4   800,000 0   0

1 个答案:

答案 0 :(得分:1)

假设以制表符分隔的记录,将是这样的:

public static void main(String[] args) throws Exception {
    if (args.length < 2) {
        System.out.println("Missing input and output filenames.");
        return;
    }
    List<String> lines = Files.readAllLines(Path.of(args[0]), StandardCharsets.UTF_8);
    NumberFormat nf = NumberFormat.getInstance();
    Collections.sort(lines, new Comparator<String>() {
        @Override
        public int compare(String o1, String o2) {
            String[] f1 = o1.split("\t");
            String[] f2 = o2.split("\t");
            if (f1.length >= 3 && f2.length >= 3) {
                try {
                    Number n1 = nf.parse(f1[2]);
                    Number n2 = nf.parse(f2[2]);
                    return Long.compare(n2.longValue(), n1.longValue());
                } catch (ParseException ex) {
                    // ignored
                }
            }
            return 0;
        }
    });
    Files.write(Path.of(args[1]), lines, StandardCharsets.UTF_8,
            StandardOpenOption.CREATE, StandardOpenOption.TRUNCATE_EXISTING);
}

作为参数运行。