You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何对文本文件中的数字进行排序:Java分数文件按数值排序问题

Java分数排序代码修复方案

问题根因

你当前的代码直接对整行字符串执行默认排序,Java中字符串默认按字典序(Unicode码点顺序)比较,只会按照名字首字母排序,不会提取冒号后的分数做数值比较,因此无法实现按分数排序的需求。

修复思路

调用Collections.sort()时传入自定义比较器,拆分每行字符串提取分数字段,转换为整数后再做数值比较即可。

修复后完整代码

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;

public class HighScore {
    public static void main(String[] args) throws IOException {
        BufferedReader reader = new BufferedReader(new FileReader("src/a.txt"));
        ArrayList<String> str = new ArrayList<>();
        String line = "";
        while((line=reader.readLine())!=null){
            str.add(line);
        }
        reader.close();
        // 自定义比较器,按分数升序排序
        Collections.sort(str, new Comparator<String>() {
            @Override
            public int compare(String o1, String o2) {
                // 拆分字符串提取分数,转为整数后比较
                int o1Score = Integer.parseInt(o1.split(":")[1]);
                int o2Score = Integer.parseInt(o2.split(":")[1]);
                // 升序返回o1Score - o2Score,降序改为o2Score - o1Score
                return o1Score - o2Score;
            }
        });
        FileWriter writer = new FileWriter("b.txt");
        for(String s: str){
            writer.write(s);
            writer.write("\r\n");
        }
        writer.close();
    }
}

补充说明

如果需要实现分数从高到低的降序排序,只需要把比较器中返回值的o1Score - o2Score修改为o2Score - o1Score即可。

内容的提问来源于stack exchange,提问作者Trainer Chad

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 03:06:03