如何用replaceAll方法 替换ip 地址  比如 202.96.22.5     替换成  202.096.022.005    
那个正则怎么写。

解决方案 »

  1.   

    方法有很多嘛,不要想着只要调用一个简单的函数就可以解决问题,如果是这样,编程也就太简单了。
    想用正则表达式判断一下ip格式是否符合xxx.xxx.xxx.xxx
    符合就跳过,不符合就自己的定义一个方法来处理:
    按.号来截取字符串(ip),然后单独处理每个字串,判断长度是否为3,不足就补零
    当然这是一种比较土的方法。
      

  2.   

    import java.util.regex.Matcher;
    import java.util.regex.Pattern;public class Test6 {    public static void main(String[] args) {
            String str = "222.96.22.5";
            
            // 方法 1(推荐)
            Pattern pattern = Pattern.compile("(?<=^|\\.)(?:(\\d{2})|(\\d))(?!\\d)");
            Matcher matcher = pattern.matcher(str);
            StringBuffer sb = new StringBuffer();
            while (matcher.find()) {
                if (matcher.start(1) > 0) {
                    matcher.appendReplacement(sb, "0$1");
                } else if (matcher.start(2) > 0) {
                    matcher.appendReplacement(sb, "00$2");
                }
            }
            matcher.appendTail(sb);
            System.out.println(sb.toString());
            
            // 方法 2
            str = str.replaceAll("(?<=^|\\.)(\\d{1,2})(?!\\d)", "0$1")
                     .replaceAll("(?<=^|\\.)(\\d{2})(?!\\d)", "0$1");
            System.out.println(str);
        }
    }
      

  3.   

    我觉得replaceAll 应该可以完成啊~~   
    我想的是可以分两步,先把2位的补零,在把1位的补零
    我正则这样写
     String regex1 = "(?=\\d{2}[\\.])";   str.replaceAll(regex1,"0"); 但是 写的不对
      会把 三位的中间也补零了 比如 192  就成了 1092   。   所以想  正则该怎么改
     而且我目的是为了 把放在文件里的ip换一种格式,如果把每个ip的取出来,然后split, 改完了,在把它拼接好。 效率好像不怎么样哦。
      

  4.   


    哈哈,不好意思。if 判断那里写错了,你把 if 子句那里两个 > 0 改成 > -1 或者 >= 0 就可以了。