如何对文本文件中的数字进行排序: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
相关产品推荐
相关产品推荐

