在java中以特殊方式对.txt数据进行排序
我有一个.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 我想对每一行进行排序,每一行中的第二个数字是排序算法唯一重要
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。也许还会将其写回文件。