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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 凝聚 中级黑马   /  2013-10-2 11:02  /  1470 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 凝聚 于 2013-10-2 11:17 编辑

package twentyfive;
import java.util.*;
public class seven {

        public static void main(String[] args) {
               
sort();
        }
public static void sort()
{
String ip="192.68.1.254 102.49.23.013 10.10.10.10 2.2.2.2  8.109.90.30";
ip=ip.replaceAll("(\\d+)","00$1");
//System.out.println(ip);
ip=ip.replaceAll("0*(\\d{3})","$1");
System.out.println(ip);

}
}
想将上述代码输出端结果为:
192.068.001.254
102.49.23.013
10.10.10.10
  这样的形式怎么办。
而这个程序输出的结果为:192.068.001.254 102.049.023.013 010.010.010.010 002.002.002.002  008.109.090.030




评分

参与人数 1技术分 +1 收起 理由
黄兴旺 + 1

查看全部评分

2 个回复

正序浏览
换行的话,要将ip字符串 按" "切割 得到一个字符数组进行输出。
为什么最后输出少于3位的数还有0呢,是因为你原先因为要比较自然顺序,把不满3位数的数通过加0变成3为数,最后输出时,没有replaceAll回来.然后你输出时的顺序不是自然顺序,是反向的,可通过Collections中的
reverseOrder()得到一个逆向的

评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

回复 使用道具 举报
你的替换操作是对整个字符串进行操作的,并没有进行分割操作并分别打印操作,打出来的当然还是整个字符串
public static void ipSort()
        {
                String ip = "192.68.1.254 102.49.23.013 10.10.10.10 2.2.2.2 8.109.90.30";

                ip = ip.replaceAll("(\\d+)","00$1");
                System.out.println(ip);

                ip = ip.replaceAll("0*(\\d{3})","$1");
                System.out.println(ip);

                String[] arr = ip.split(" ");

                TreeSet<String> ts = new TreeSet<String>();
//这里也可以用Array.sort(arr[])进行升序排序,如果有相同对象的话就不好用TreeSet了
                for(String s : arr)
                {
                        ts.add(s);
                }

                for(String s : ts)
                {
                        System.out.println(s.replaceAll("0*(\\d+)","$1"));
                }
        }

评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

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