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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 赵洋洋 中级黑马   /  2014-6-13 22:35  /  3407 人查看  /  12 人回复  /   1 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. package com.itheima;

  2. import java.io.BufferedReader;
  3. import java.io.FileReader;

  4. /*第8题: 把以下IP存入一个txt文件,
  5. * 编写程序把这些IP按数值大小,
  6. * 从小到达排序并打印出来。
  7. 61.54.231.245
  8. 61.54.231.9
  9. 61.54.231.246
  10. 61.54.231.48
  11. 61.53.231.249
  12. */
  13. public class Test8 {
  14.     //1,首先读入文件
  15.         //
  16.         public static void main(String[] args) throws Exception {
  17.                 // TODO Auto-generated method stub
  18.                
  19.                 //创建读取文件的流对象
  20.                 FileReader fr=new FileReader("txt.txt");
  21.                
  22.                 //创建缓冲区
  23.                 BufferedReader bufr=new BufferedReader(fr);
  24.                
  25.                
  26.                 //字符串数组
  27.                 String[]str=new String[5];
  28.                
  29.                 //定义字符串的个数
  30.                 int num=0;
  31.                
  32.                 //读入的一行字符
  33.                 String line=null;
  34.                 while((line=bufr.readLine())!=null){
  35.                        
  36.                         str[num]=line;
  37.                         num++;
  38.                 }
  39.                 bufr.close();
  40.                

  41.         //从小到大冒泡排序
  42.         for (int i = 0; i < str.length; i++){
  43.             for (int j = 0; j < str.length - 1 - i; j++)
  44.             {
  45.                 if (ToNumber(str[j]) > ToNumber(str[j + 1]))
  46.                 {
  47.                     String strBu = str[j];
  48.                     str[j] = str[j + 1];
  49.                     str[j + 1] = strBu;  
  50.                 }
  51.             }
  52.         }

  53.         
  54.         //输出IP地址排序后的结果
  55.         for (int i = 0; i < str.length; i++)
  56.         {
  57.                      
  58.               System.out.println(str[i]);
  59.         }
  60.     }
  61.                
  62.         //将IP地址转换成数字
  63.     public static double ToNumber(String str)throws Exception {
  64.            
  65.             String s="";
  66.            
  67.             for(int i=0;i<str.length();i++)
  68.             {   
  69.                     //取出除'.'以外的字符拼接成字符串
  70.                     if(str.charAt(i)!='.'){
  71.                             char c=str.charAt(i);
  72.                             s+=c;
  73.                     }
  74.             }
  75.             //将字符串转换成double型返回
  76.         double db=Double.parseDouble(s);
  77.         return db;
  78.     }
  79. }
复制代码

12 个回复

倒序浏览
谢啦。。。。。。。。。
回复 使用道具 举报
貌似很难啊
回复 使用道具 举报
谢谢分享啊
回复 使用道具 举报
考题的原意应该是用正则表达式吧
回复 使用道具 举报
谢谢!!!!!!!
回复 使用道具 举报
woshihq 发表于 2014-6-14 00:20
谢谢!!!!!!!

你录取了吗?
回复 使用道具 举报
woshihq 发表于 2014-6-14 00:20
谢谢!!!!!!!

:D你面试被录取了没?
回复 使用道具 举报

哈哈,,,客气
回复 使用道具 举报
wangkerui 发表于 2014-6-13 22:39
谢啦。。。。。。。。。

哈哈,,客气了,,自己也是查资料做的
回复 使用道具 举报
好像是用正则表达式做的。补零把所有的IP扩展成4段12位,每段3位的形式。再用字典顺序排序这些IP,再将每段前面填充的零去掉即可。要用正则里的组替换。
回复 使用道具 举报
61.54.231.9
61.54.231.48
61.53.231.249
61.54.231.245
61.54.231.246
貌似不对啊,你这样拍出来的顺序是这个。明显错了
回复 使用道具 举报
public class Test06 {
        public static void main(String[] args) throws Exception {
                BufferedReader bufReader = new BufferedReader(new FileReader(new File(
                                "IP.txt")));
                // 利用Set排序, 构造特定Comparator
                Set<String> set = new TreeSet<String>(new MyComparator());

                // 读取IP.txt文件;
                String ipStr = null;
                while ((ipStr = bufReader.readLine()) != null) {
                        set.add(ipStr.trim());
                }
                bufReader.close();

                // 直接打印;
                for (String str : set) {
                        System.out.println(str);
                }

        }
}

class MyComparator implements Comparator<String> {

        @Override
        public int compare(String o1, String o2) {
                String[] strAr1 = o1.split("\\.");
                String[] strAr2 = o2.split("\\.");

                // 比较四个间区的Ip大小;
                for (int i = 0; i < strAr1.length; i++) {
                        // 相等跳出,比下一个间区;
                        if (strAr1[i].equals(strAr2[i])) {
                                continue;
                        }
                        // 不相等,则可以确定顺序
                        Integer i1 = new Integer(strAr1[i]);
                        Integer i2 = new Integer(strAr2[i]);
                        return i1.compareTo(i2);
                }
                // IP完全相同,则不加入;可以改变0,就可以加入;
                return 0;
        }
}
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马