A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 王训印 中级黑马   /  2015-8-9 17:49  /  693 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

已知文件a.txt文件中的内容为“bcdeadferwplkou”,请编写程序读取该文件内容,并按照自然顺序排序后输出到b.txt文件中。即b.txt中的文件内容应为“abcd…………..”这样的顺序。

我这有点问题,排序结果:bcaddeefklopruw不对,有大神还望指点
  1. package com.wxy002;

  2. import java.io.BufferedReader;
  3. import java.io.BufferedWriter;
  4. import java.io.FileInputStream;
  5. import java.io.FileNotFoundException;
  6. import java.io.FileOutputStream;
  7. import java.io.FileReader;
  8. import java.io.FileWriter;
  9. import java.io.IOException;
  10. import java.lang.reflect.Array;
  11. import java.nio.CharBuffer;
  12. import java.util.Iterator;
  13. import java.util.Set;
  14. import java.util.TreeMap;
  15. import java.util.TreeSet;

  16. public class Test22
  17. {
  18.         public static void main(String[] args)
  19.         {
  20.                 BufferedReader br = null;
  21.                 BufferedWriter bw =null;
  22.                
  23.                 try {
  24.                         br =new BufferedReader(new FileReader("a.txt"));//因为源文件是文本文件所以用缓冲字符流读取
  25.                         bw = new BufferedWriter(new FileWriter("b.txt"));//因为目标文件也是文本文件所以用缓冲字符流写入
  26.                        
  27.                         String str ;
  28.                         while((str = br.readLine())!=null)
  29.                         {
  30.                                
  31.                                 bw.write(sort(str));
  32.                                
  33.                         }

  34.                        
  35.                        
  36.                 } catch (Exception e) {
  37.                         // TODO Auto-generated catch block
  38.                         e.printStackTrace();
  39.                 }finally
  40.                 {
  41.                         try {
  42.                                 br.close();
  43.                         } catch (IOException e) {
  44.                                 // TODO Auto-generated catch block
  45.                                 e.printStackTrace();
  46.                         }
  47.                         try {
  48.                                 bw.close();
  49.                         } catch (IOException e) {
  50.                                 // TODO Auto-generated catch block
  51.                                 e.printStackTrace();
  52.                         }
  53.                 }
  54.                
  55.                
  56.                
  57.         }
  58.         public static String  sort(String str)//冒泡排序
  59.         {
  60.                 char[] ch =  str.toCharArray();                                       
  61.                 StringBuilder sb =  new StringBuilder();
  62.                
  63.                 for (int i = 0 ; i<ch.length-1 ; i++)
  64.                 {
  65.                         for(int j =i ; j<ch.length -i -1;j++)
  66.                         {
  67.                                 if(ch[j] > ch[j+1])
  68.                                 {
  69.                                         char c = ch[j];
  70.                                         ch[j] =ch[j+1];
  71.                                         ch[j+1] = c;
  72.                                 }
  73.                         }
  74.                 }
  75.                
  76.                 for(int i = 0 ; i<ch.length; i++)
  77.                 {
  78.                        
  79.                         sb.append(ch[i]);
  80.                        
  81.                        
  82.                 }
  83.                 str = sb.toString();
  84.                 System.out.println(str);
  85.                 return str;
  86.         }
  87.        

  88. }
复制代码

5 个回复

倒序浏览
本帖最后由 金逗逗 于 2015-8-9 18:07 编辑

既然你都把字符串转成字符数组了,为什么不用数组工具类Arrays.sort(ch)呢?这样就能自然排序了再者,68行,冒泡排序内循环每次都是从角标0开始的,因为每次循环最大值都是在后面的角标位。
回复 使用道具 举报
金逗逗 发表于 2015-8-9 18:03
既然你都把字符串转成字符数组了,为什么不用数组工具类Arrays.sort(ch)呢?这样就能自然排序了再者,68行 ...

学习了
回复 使用道具 举报
金逗逗 发表于 2015-8-9 18:03
既然你都把字符串转成字符数组了,为什么不用数组工具类Arrays.sort(ch)呢?这样就能自然排序了再者,68行 ...

学习了 O(∩_∩)O谢谢!
回复 使用道具 举报
直接写到treeset中,再拿出来不就行了
回复 使用道具 举报
是学成下山了么
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马