java中数字字符串排序

        老师布置的一个作业要用到把文件中的各条记录按照记录中的一个字段排序,这个字段是数字字符串。本打算把字符串转成数字,再用学过的一些排序算法实现,可一想,如此强大的java,这种小小功能应该不用这么复杂的自己折腾。仔细读过书后,发现果真有捷径可走。

        我的思路是这样的

        1.把字符串读入ArrayList,每个字符串是一项;

        2.把ArrayList对象传入Collection.sort();

        3.大功告成,ArrayList中的字符串已经排好序了。

        有几点要注意,构造ArrayList对象时,要声明类型,因为ArrayList是基于泛型实现的。如ArrayList<String> lines = new ArrayList<String>()。之所以不用转换成数字可以实现排序,是因为排序是按照ASCII码实现的,数字在ASCII码中就是从小到大排列的。

        还有一点读写文件的知识,读写文件时,使用BufferedInputStream和BufferedOutputStream可以获得比较好的效率。应为这种读文件的方式,自己配有一个缓冲区,可以把磁盘数据缓冲到内存中。另外,读文件的时候使用CharArrayWriter可以很方便的把文件内容转换成字符串,因为文件的read()方法获得int数据(估计是为了保存各种数据方便统一吧),CharArrayWriter的对象可以接受int,利用他的toString()方法,就可以把读入的数据转换成字符串。

        下面我给出我的实现代码,读取的文件名是main函数的参数。

 import java.util.*;
import java.io.*;
public class Sort {
 private BufferedInputStream in;
 private BufferedOutputStream out;
 
 Sort(String inputFile,String outputFile)
 {
  try{
   File srcFile = new File(inputFile);
   File desFile = new File(outputFile);
   in = new BufferedInputStream(new FileInputStream(srcFile));
   out = new BufferedOutputStream(new FileOutputStream(desFile));
  }
  catch(IOException e){
   e.printStackTrace();
  }
  
 }
 
 public void sortRecord()
 {
  try{
   ArrayList<String> lines = new ArrayList<String>();//保证ArrayList类型安全
   CharArrayWriter writer = new CharArrayWriter();
   int c = in.read();
   while(c != -1)
   {
    writer.write(c);
    if((char)c == '/n')
    {
     String line = writer.toString();
     lines.add(line);
     writer.reset();
    }
    c = in.read();
   }
   Collections.sort(lines);
   Iterator<String> itr = lines.iterator();
   
   while(itr.hasNext()){
    char[] buf = ((String)itr.next()).toCharArray();
    for(int i=0;i<buf.length;i++)
    {
     out.write(buf[i]);
    }
   }
   out.flush();//将数据写入文件
   out.close();
  }
  catch(IOException e)
  {
   e.printStackTrace();
  }
  
 }
 public static void main(String[] args)
 {
  Sort record = new Sort(args[0],args[1]);
  record.sortRecord();
 }
 
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值