JAVA对文件内数据进行排序的解决办法

  1. 今天在对文件内数据进行排序时,出了点问题,我的做法是这样的:
  2. 首先从键盘输入一行数数字,用BufferedReader的readline方法获得,然后用FileWriter写入到文件中。跟着用FileReader的read方法,将文件内的数据读入到自己定义的char数组中,最后再用数组的排序函数,但最终输出不对。以下是源代码:
  3. import java.io.*;
  4. import java.util.*;public class SortNum {public SortNum() {
  5. // TODO Auto-generated constructor stub  
  6. }/**
  7. * @param args
  8. */
  9. public static void main(String[] args) {
  10. // TODO Auto-generated method stub  
  11. char ch[] = new char[10];
  12. try {
  13.    File file = new File("c:/save.dat");
  14.    BufferedReader br = new BufferedReader(new InputStreamReader(
  15.      System.in));
  16.    FileReader fr = new FileReader(file);
  17.    FileWriter fw = new FileWriter(file);
  18.    String s = br.readLine();
  19.    fw.write(s);
  20.    fr.read(ch);
  21.    Arrays.sort(ch);
  22.    for (int i = 0; i < ch.length; i++) {
  23.     System.out.print(ch[i] + " ");
  24.    }
  25.    fw.close();
  26.    fr.close();
  27.    br.close();
  28. catch (Exception e) {
  29.    e.printStackTrace();
  30. }
  31. }}
  32. //可以说输入是没问题的,主要是利用数组得到那一行输入数据时,估计是编码方面的问题,导致最终输出不正确。 
  33. //另外说一下上面这种方面的局限性。由于是用char,所以对于输入的数据,最终排序只能按一位字符来排,所以这 
  34. //种方法是不可行的。 
  35. //介绍另一种方法: 
  36. //String类中的split方法,可以用如下形式输入1,2,3,4, 然后用split(“,”)的方法,它会以字符串数组分 
  37. //组。这样就解决了获取输入数据不用再转换成char字符型的情况了。 
  38. //源代码如下: 
  39. import java.io.*;
  40. import java.util.*;
  41. public class SortNum {
  42. public SortNum() {
  43.    // TODO Auto-generated constructor stub  
  44. }
  45. /**
  46. * @param args
  47. */
  48. public static void main(String[] args) {
  49.    // TODO Auto-generated method stub  
  50.    String st[];
  51.    try {
  52.     File file = new File("c:/save.dat");
  53.     FileWriter fw = new FileWriter(file);
  54.     FileReader fr = new FileReader(file);
  55.     BufferedReader br = new BufferedReader(new InputStreamReader(
  56.       System.in));
  57.     String s = br.readLine();
  58.     st = s.split(",");
  59.     fw.write(s);
  60.     Arrays.sort(st);
  61.     for (int i = 0; i < st.length; i++) {
  62.      System.out.print(st[i] + " ");
  63.      fw.append(st[i] + " ");
  64.     }
  65.     br.close();
  66.     fr.close();
  67.     fw.close();
  68.    } catch (Exception e) {
  69.     e.printStackTrace();
  70.    }
  71. }
  72. }
  73. //不过这个其实也有点小问题,针对字符串数组的排序,Arrays.sort排序的思想应该是按先按字符内容,再按字符内 
  74. //容大小来排的。大家可以试试,当输入10,100,50,5时,它的输出是5,10,100,50 
  75. //其实要解决这个问题也比较简单,不要用Arrays.sort来排序,自己写个排序的算法,使用冒泡来排就可以了。有兴 
  76. //趣的不妨试试。 
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值