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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

©   /  2014-8-14 23:43  /  4779 人查看  /  13 人回复  /   3 人收藏 转载请遵从CC协议 禁止商业使用本文

/*
* 第8题: 把以下IP存入一个txt文件,编写程序把这些IP按数值大小,从小到达排序并打印出来。
        61.54.231.245
        61.54.231.9
        61.54.231.246
        61.54.231.48
        61.53.231.249
       
分析:本题涉及IO流读取文本数据,正则表达式,字符串排序的相关知识       
     1、定义一个字符读取流从指定的txt中读取IP数据
     2、将读取到的IP数据转换为字符串,然后进行排序
        IP地址分为4段,每一段的最大位数是3,先将最低位补齐(在前面补0),补完后由于有的地址段已经超过3位,
                     再进行处理,将前面多余的0去掉,保留3位。此时得到的IP每一段都是3位的,将得到的IP地址排序
                排序方法可将字符串转换成数组,利用工具类Arrays.sort排序
                也可以将IP地址存入到TreeSet中排序
*/
public class Test8 {
        public static void main(String[] args) {
                //从txt文件中读取IP地址
                String str = getIp();
                //对ip地址进行排序
                Mysort(str);
        }
       
    public static void Mysort(String str) {
            //第一次替换,给所有的地址段前补两个0,
                str = str.replaceAll("(\\d+)", "00$1");
                //第二次替换,去除地址段前多余的0,让每一段都是3位
                str = str.replaceAll("0*(\\d{3})", "$1");
                //读取的IP地址字符串中带有换行符,就以换行符来切割字符串,
                //windows中的换行符为\r\n,正则表达式中\都以成对的形式出现,所以切割规则为\\r\\n
                String[] arr = str.split("\\r\\n");
               
                //排序方法一
                //调用数组工具类的sort方法对数组排序
                Arrays.sort(arr);
                //遍历数组,打印排序后的IP地址
                for (int i = 0; i < arr.length; i++) {
                        //第三次替换,排序后的IP地址段中有的前面有多余无效的0,将其去掉
                        System.out.println(arr[i].replaceAll("0+(\\d+)", "$1"));
                }
                //定义分割付区分两种不同排序方式打印的结果
                System.out.println("----------------------------");
               
                //排序方法二
                //通过TreeSet集合进行排序
                TreeSet<String > set = new TreeSet<String>();
                //迭代取出切割后的IP地址字符串将其添加到TreeSet集合中
                for (String ip : arr) {
                        set.add(ip);
                }
                //遍历set集合,打印排序后的IP地址
                for (String s1 : set) {
                        //第三次替换,排序后的IP地址段中有的前面有多余无效的0,将其去掉
                        System.out.println(s1.replaceAll("0+(\\d+)", "$1"));
                }
               
        }

    public static String  getIp() {
        // 定义一个字符读取流,读取txt中的IP
                BufferedReader bfr = null;
            //定义一个字符串用来存储读取到IP字符串数据
                String line = null;
                try {
                           bfr = new BufferedReader(new FileReader("ip.txt"));
                           //定义字符缓冲数组
                           char[] buf = new char[1024];
                           int len = 0;
                           while((len = bfr.read(buf))!=-1){
                                   //将读取到的字符数据赋给line
                                   line = new String(buf, 0, len);
                           }
                } catch (Exception e) {
           e.printStackTrace();
                }finally{
                         //判断流是否为空,若不为空则关闭字符读取流
                        if (bfr != null) {
                                try {
                                         //调用close方法关闭流对象
                                        bfr.close();
                                } catch (IOException e) {
                                        e.printStackTrace();
                                }
                        }
                }
                //返回IP字符串数据
                return line;
        }
}

回复 使用道具 举报 2 0
您需要登录后才可以回帖 登录 | 加入黑马