Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在java中以特殊方式对.txt数据进行排序_Java_Database_Sorting_Txt - Fatal编程技术网

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

在java中以特殊方式对.txt数据进行排序,java,database,sorting,txt,Java,Database,Sorting,Txt,我有一个.txt文件,我想对它进行排序,如下所示: GENEBOI公司通信15893X590 46741 174700 SH DFND 4,11 174700 0 DCHATRA Restarization GROUP INC N CL A 14771P827 2659074 5213461 SH DFND 4,8,11 5213461 0 0 弗罗拉卡茨公司107393852 35744 800000上海DFND 4 800000 我想对每一行进行排序,每一行中的第二个数字是排序算法唯一重要

我有一个.txt文件,我想对它进行排序,如下所示:

GENEBOI公司通信15893X590 46741 174700 SH DFND 4,11 174700 0
DCHATRA Restarization GROUP INC N CL A 14771P827 2659074 5213461 SH DFND 4,8,11 5213461 0 0
弗罗拉卡茨公司107393852 35744 800000上海DFND 4 800000
我想对每一行进行排序,每一行中的第二个数字是排序算法唯一重要的东西。我想把它们从最高的(例如2659074)排序到最低的(例如35744)。重要的是,每一行的内容都不应被编辑或与其他行混淆

所以结果应该是这样的:

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);
}
DCHATRA Restaritation GROUP INC.N CL A 14771P827 2659074 5213461 SH DFND 4,8,11 5213461 0
GENEBOI INC.公司地址:15893X590 46741 174700 SH DFND 4,11 174700 0
弗罗拉卡茨公司107393852 35744 800000上海DFND 4 800000

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

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);
}
publicstaticvoidmain(字符串[]args)引发异常{
如果(参数长度<2){
System.out.println(“缺少输入和输出文件名”);
返回;
}
列表行=Files.readAllLines(Path.of(args[0]),StandardCharsets.UTF_8);
NumberFormat nf=NumberFormat.getInstance();
Collections.sort(行、新比较器(){
@凌驾
公共整数比较(字符串o1、字符串o2){
字符串[]f1=o1.split(“\t”);
字符串[]f2=o2.split(“\t”);
如果(f1.length>=3&&f2.length>=3){
试一试{
编号n1=nf.parse(f1[2]);
数字n2=nf.parse(f2[2]);
返回Long.compare(n2.longValue(),n1.longValue());
}捕获(解析异常){
//忽略
}
}
返回0;
}
});
Files.write(Path.of(args[1])、line、StandardCharsets.UTF_8、,
StandardOpenOption.CREATE,StandardOpenOption.TRUNCATE_现有);
}

使用as参数运行。

好吧,这会将文件分解为一个列表,然后在其上应用a。也许还会将其写回文件。