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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 北极雪871208 中级黑马   /  2014-3-30 19:52  /  9183 人查看  /  34 人回复  /   3 人收藏 转载请遵从CC协议 禁止商业使用本文

把以下IP存入一个txt文件,编写程序把这些IP按数值大小,从小到达排序并打印出来。
61.54.231.245
61.54.231.9
61.54.231.246
61.54.231.48
61.53.231.249
(版主顺便给俩技术分吧!多谢!)

评分

参与人数 1技术分 +1 收起 理由
何伟超 + 1 那基础测试提问多没劲呀,不过既然来了,你.

查看全部评分

34 个回复

正序浏览
66666666666666
回复 使用道具 举报
我也不会这个,没有思路!
回复 使用道具 举报
看了半天,没有懂。
回复 使用道具 举报
/* 1.将IP的每一段都前面补两个0 2.将每一端都变成3位 //割成四段的IP 3.将其从大到小排列 4.将前面多余的0去掉 */ import java.util.*; import java.io.*; class RuXue1  {         public static void main(String[] args) throws Exception         {                 //System.out.println("Hello World!");                 IpSort();         }         public static void IpSort()throws Exception         {                 BufferedReader br=new BufferedReader(new FileReader("ruxue1.txt"));                 String line=null;                 StringBuffer sb=new StringBuffer();                 while ((line=br.readLine())!=null)                 {              sb.append(line+" ");                  }                   String str=sb.toString();                 //System.out.println(str);                                          //"61.54.231.245 61.54.231.9 61.54.231.246 61.54.231.48 61.53.231.249";                 //1.将IP的每一段都前面补两个0                 str=str.replaceAll("(\\d+)","00$1");                 //2.将每一端都变成3位                 str=str.replaceAll("0*(\\d{3})","$1");                 //割成四段的IP                 String[] s=str.split(" ");         //3.将其从大到小排列                 TreeSet<String> tree=new TreeSet<String>();                 for (String st:s)                 {                         tree.add(st);                 }                 for (String st:tree)                 {                         st=st.replaceAll("0*(\\d+)","$1");                         //打印字符串                         //4.将前面多余的0去掉                     System.out.println(st);                 }                           br.close();         } }
回复 使用道具 举报
stamSuper 发表于 2014-5-9 08:30
字符串不是有比较大小的方法么 ,直接用那个方法多好啊,没有必要这么麻烦

貌似字符串比较的话9会比236大,实现不了按数字比较,楼上那位加0的方法比较好
回复 使用道具 举报
感觉好复杂的样子啊
回复 使用道具 举报
wujiemin 发表于 2014-10-7 15:39
这些都太麻烦了,直接利用set

public class Test06 {

给力,给力。
回复 使用道具 举报
学习了。。
回复 使用道具 举报
rehan 中级黑马 2015-2-22 21:48:27
26#
syw02014 发表于 2014-3-30 21:05
希望能帮到你:程序在控制台上显示内容:
61.53.231.249
61.54.231.9

你的方法是错误的,控制台上的顺序一点没变!
回复 使用道具 举报
rehan 中级黑马 2015-2-22 16:46:12
25#
有点难啊,怎么做???
回复 使用道具 举报
rehan 中级黑马 2015-2-22 16:10:12
24#
。。。。。。。。。。。。。。。
回复 使用道具 举报
嘿嘿嘿嘿嘿嘿
回复 使用道具 举报
来借鉴一下
回复 使用道具 举报

每天都来看一看
回复 使用道具 举报
来看看!
回复 使用道具 举报
打印结果:
61.53.231.249
61.54.231.9
61.54.231.48
61.54.231.245
61.54.231.246
回复 使用道具 举报
本帖最后由 高鹏飞 于 2014-10-22 08:47 编辑
  1. public class Test8 {

  2.         public static void main(String[] args){
  3.                
  4.                 //调用IP排序方法
  5.                 sortIP(new File("F:\\ip.txt"));
  6.                
  7.         }

  8.         private static void sortIP(File file) {
  9.                
  10.                 //创建文件读取流
  11.                 BufferedReader br = null;
  12.                 try {
  13.                        
  14.                         br = new BufferedReader(new FileReader(file));
  15.                        
  16.                         //定义一个变量
  17.                         String line = null;
  18.                         //创建一个集合用来存储从文件读取到的IP
  19.                         List<String> list = new ArrayList<String>();
  20.                         while ((line=br.readLine())!=null) {
  21.                                 //先给读取到的每一个IP地址各段前补零
  22.                                 line = line.replaceAll("(\\d+)", "00$1");
  23.                                 //再取IP地址各段的后三位
  24.                                 line = line.replaceAll("0*(\\d{3})", "$1");
  25.                                 //将读取并经过正则表达式处理后的IP添加到list集合中
  26.                                 list.add(line);
  27.                         }
  28.                         //使用Collections的sort方法对其自然排序
  29.                         Collections.sort(list);
  30.                         //遍历集合打印输出排序后的IP地址
  31.                         for (String li : list) {
  32.                                 System.out.println(li.replaceAll("0*(\\d+)", "$1"));//使用正则表达式,将开始补全的0去掉
  33.                         }
  34.                 } catch (Exception e) {
  35.                        
  36.                 }finally{//关闭流
  37.                         if (br != null) {
  38.                                 try {
  39.                                         br.close();
  40.                                 } catch (IOException e) {
  41.                                        
  42.                                         throw new RuntimeException("关闭失败!");
  43.                                 }
  44.                         }
  45.                 }
  46.         }
  47. }
复制代码

回复 使用道具 举报
这些都太麻烦了,直接利用set

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;
        }
}
回复 使用道具 举报 3 0
syw02014 发表于 2014-3-30 21:05
希望能帮到你:程序在控制台上显示内容:
61.53.231.249
61.54.231.9

String[] p = str.split(".");
在运行时不会报错,但是会出现问题。
split();接收的是正则表达式。"."表示匹配任意字符。这样的话p.length=0。
根本不会进入for循环得不到sum的值,进而导致比较无效果。

改成String[] p = str.split("\\.");
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马