Невозможно извлечь числа из строки методом java split () - PullRequest
0 голосов
/ 12 февраля 2019

У меня есть этот код, который принимает 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 ]

0 голосов
/ 13 февраля 2019

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

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

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

0 голосов
/ 12 февраля 2019

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

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

на

String data[]=text.split("\\.");
0 голосов
/ 12 февраля 2019

Решение с использованием пакета 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 выполнит экранирование.

0 голосов
/ 12 февраля 2019

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

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();
    }

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

0 голосов
/ 12 февраля 2019

Используйте это следующим образом:

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...