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

Sort .txt data in a special way in java

我有一个 .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

假设制表符分隔的记录,它会是这样的:

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);
}

运行 以 作为参数。