无法在我的ip_adress中切掉前导零

时间:2018-11-22 16:14:01

标签: java arrays string parsing ip

该功能应从IPv4地址中删除前导零。地址007.006.02.90例如应转换为7.6.2.90。看来问题出在这行:

public static String zero_cutter(String ip) {
    String ipnew;
    String []  spliti = ip.split(".");
    int[] myArray = new int[4];

    for (int i = 0; i < 4; i++) {
        myArray [i] = Integer.parseInt(spliti [i]);
    }

    for (int i = 0; i < 4; i++) {
        spliti [i]  = Integer.toString(myArray [i]);
    }
    ipnew = spliti [0] + "." + spliti [1] + "." + spliti [2] +    "." + spliti [3];

    return ipnew;
}

3 个答案:

答案 0 :(得分:4)

您必须在模式中转义.字符,因为点是与任何字符匹配的特殊字符(根据java.util.regex.Pattern javadoc)。

  

预定义字符类

     

。任何字符(可能匹配也可能不匹配行终止符)

一种方法是在模式中使用\\

String[] spliti = ip.split("\\.");\

不过,您可以将代码替换为InetAddress类:

String ip = "007.006.002.090";
InetAddress addr = InetAddress.getByName(ip);
System.out.println(addr.getHostAddress()); // 7.6.2.90

答案 1 :(得分:1)

split使用正则表达式作为参数。 .是正则表达式中的特殊字符(=任何字符)。使用split("[.]")实际上在每个周期分割字符串。

编写此方法的一种较短方法是:

return Arrays.stream(ip.split("[.]")).map(Integer::valueOf).collect(Collectors.joining(".");

答案 2 :(得分:1)

受split操作接受正则表达式的启发,这是一个(尚未测试的)基于正则表达式的解决方案。

public static String zero_cutter(String ip) {
    return ip.replaceAll("(?<=^|\\.)0+(?!\\.|$)","");
}