如何使用Java对文本文件中带°C单位的温度数值进行降序排序
问题分析
- 原代码直接对字符串做默认排序,使用的是字典序升序规则,不会提取温度数值比较,不符合降序排列的需求
- 代码存在编译错误:finally块关闭输入流时变量名错误,你定义的BufferedReader实例名为
reader,代码中错误调用了inputStream.close(),会直接编译失败
修正后代码
自定义比较器提取每行的温度数值做降序排列,代码如下:
import java.io.*; import java.util.*; public class temperatur { public static void main(String[] args) throws IOException { BufferedReader reader = null; PrintWriter outputStream = null; ArrayList<String> rows = new ArrayList<>(); try { reader = new BufferedReader(new FileReader("temp.txt")); outputStream = new PrintWriter(new FileWriter("tempout.txt")); String line; while ((line = reader.readLine()) != null) { rows.add(line); } // 自定义排序规则:按温度数值降序排列 Collections.sort(rows, (s1, s2) -> { int temp1 = Integer.parseInt(s1.split("°")[0].trim()); int temp2 = Integer.parseInt(s2.split("°")[0].trim()); return Integer.compare(temp2, temp1); }); for (String cur : rows) { outputStream.println(cur); } } finally { if (reader != null) { reader.close(); } if (outputStream != null) { outputStream.close(); } } } }
输出结果
运行代码后生成的tempout.txt内容如下,完全符合数值降序要求:
21° C 20° C 19° C 18° C 17° C 16° C 16° C 15° C 13° C
内容的提问来源于stack exchange,提问作者virreoh
相关产品推荐
相关产品推荐

