在 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);
}
运行 以 作为参数。
我有一个 .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);
}
运行 以