Невозможно извлечь числа из строки методом java split()

У меня есть этот код, который принимает IP-адрес (строку) в формате 255.255.255.255 и должен выполнить некоторую постобработку этих чисел (здесь не опубликовано), но для которых строка должна быть преобразована в массив целых чисел.

Я использовал здесь split() метод, но это не дает мне результат. Я видел другие ответы о том, как sp делал это с помощью регулярных выражений, но ни один из них не помог мне.

import java.util.Scanner;
public class Main{
    public static void main(String args[]){
        String text;

        Scanner take=new Scanner(System.in);
        text=take.nextLine();
        String data[]=text.split(".",4);

        for(String w:data){
            System.out.println(w);
        }
        take.close();
    }
}

Я попытался с вводом 12.36.26.25

Но он выводит 36.26.25, который должен был быть как 12 36 26 25

5 ответов

Решение

Используйте это так:

        String example="12.36.26.25";
        String data[]=example.split("\\.");

        for(String w:data){
            System.out.println(w);
        }

И это будет делать то, что вы хотите;)

Использование split(regex,limit), как вы это сделали, фактически разделит любой символ (так как. Является регулярным выражением для любого символа) и в основном удалит первые несколько символов.

Решение с использованием java.util.regex пакет:

import java.util.regex.*;
public class Main{

     public static void main(String args[]){
        String text = "12.36.26.25";
        String separator = ".";
        String[] data = text.split(Pattern.quote(separator));
        System.out.println(data.length);
        for(String w: data){
            System.out.println(w);
        }
    }
}

Pattern.quote сделает выход.

Позвольте дать вам, ребята, альтернативное решение:

public static void main(String args[]){
        String text;

        Scanner take=new Scanner(System.in);
        text=take.nextLine();
        String data[]=text.split("[.]");

        for(String w:data){
            System.out.println(w);
        } 
        take.close();
    }

вы можете избежать точки, используя "[.]" в качестве строки, превращая точку из оператора регулярного выражения в буквенный символ

Просто измени эту строку

String data[]=text.split(".",4);

в

String data[]=text.split("\\.");

Альтернативным решением является использование sun.net.util.IPAddressUtil извлечь числа из заданной строки IP-адреса, как показано ниже:

String ipAddressString = "10.20.30.40";
byte[] numbers = IPAddressUtil.textToNumericFormatV4(ipAddressString);

Числа в формате ByteArray могут быть преобразованы в целочисленный массив с использованием этого решения.

Другие вопросы по тегам