Невозможно вырезать начальные нули в моем ip_adress - PullRequest
0 голосов
/ 22 ноября 2018

Эта функция должна удалять начальные нули с адресов 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 голосов
/ 22 ноября 2018

Вы должны экранировать символ . в шаблоне, поскольку точка - это специальный символ, соответствующий любому символу (согласно 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
0 голосов
/ 22 ноября 2018

Вдохновленный операцией разбиения, принимающей регулярное выражение, вот (пока еще не проверенное) решение на основе регулярных выражений.

public static String zero_cutter(String ip) {
    return ip.replaceAll("(?<=^|\\.)0+(?!\\.|$)","");
}
0 голосов
/ 22 ноября 2018

split принимает регулярное выражение в качестве параметра.. - это специальный символ (= любой символ) в регулярном выражении.Используйте split("[.]") для фактического разбиения строки в каждом периоде.

Более короткий способ написания этого метода заключается в следующем:

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