黑马程序员技术交流社区

标题: 正则表达式字符串换行 [打印本页]

作者: 凝聚    时间: 2013-10-2 11:02
标题: 正则表达式字符串换行
本帖最后由 凝聚 于 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





作者: 陈钦涛    时间: 2013-10-2 13:17
你的替换操作是对整个字符串进行操作的,并没有进行分割操作并分别打印操作,打出来的当然还是整个字符串
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"));
                }
        }
作者: 张文豪    时间: 2013-10-2 16:31
换行的话,要将ip字符串 按" "切割 得到一个字符数组进行输出。
为什么最后输出少于3位的数还有0呢,是因为你原先因为要比较自然顺序,把不满3位数的数通过加0变成3为数,最后输出时,没有replaceAll回来.然后你输出时的顺序不是自然顺序,是反向的,可通过Collections中的
reverseOrder()得到一个逆向的




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2