黑马程序员技术交流社区

标题: 正则表达式小练习求解 [打印本页]

作者: Synaric    时间: 2015-10-5 10:37
标题: 正则表达式小练习求解
示例博客有个小练习,注意看最后一步
  1. /*
  2. *需求: 将ip地址进行地址段顺序的排序。 192.68.1.254 102.49.23.013 10.10.10.10 2.2.2.2 8.109.90.301
  3. *思路: 按照字符串自然顺序,只要让他们每一段都是3位即可。
  4. *      1、按照每一段需要的最多的0进行补齐,那么每一段就会至少保证有3位。
  5. *      2、将每一段只保留3位。
  6. */
  7. public class RegexTest_2 {
  8.         public static void main(String[] args) {
  9.                 String ip="192.68.1.254 102.49.23.013 10.10.10.10 2.2.2.2 8.109.90.301";  
  10.                 System.out.println(ip);
  11.                
  12.             //保证每一段至少三位
  13.                 ip = ip.replaceAll("(\\d+)", "00$1");
  14.                 System.out.println(ip);
  15.                
  16.                 //将每一段截取到三位
  17.                 ip = ip.replaceAll("0*(\\d{3})", "$1");
  18.                 System.out.println(ip);
  19.              
  20.                 //以空格截取子串
  21.                 String[] ips = ip.split(" ");
  22.                
  23.                 //利用TreeSet自然元素排序
  24.                 TreeSet<String> tSet = new TreeSet<String>();
  25.                 for(String string : ips){
  26.                         tSet.add(string);
  27.                 }
  28.                
  29.                 //去掉每段多余的0并打印
  30.                 for(String string : tSet){
  31.                         //不恰当的匹配,102会被截取为12
  32.                         //System.out.println(string.replaceAll("0*(\\d)", "$1"));
  33.                 }
  34.         }
  35. }
复制代码

如果对102.049.023.013去0会变成12.49.23.13,应该怎么写好呢?

我有想过
  1. System.out.println(string.replaceAll("(0([^0]\\d))|(00([^0]))", "$2"));
复制代码

但不知道$后面怎么写





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