3

I have this code which takes an IP address(string) of the format 255.255.255.255 and needs to perform some post processing on those numbers (not posted here) but for which the string must be converted into an array of ints.

I have used here the split() method but it's not giving me the result. I saw other answers on sp doing it with regex but none of them worked for me.

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

I have tried with the input 12.36.26.25

But it outputs 36.26.25 which was supposed to be like 12 36 26 25

Draken
  • 3,134
  • 13
  • 34
  • 54
dutta.ari
  • 165
  • 4

5 Answers5

11

Use it like that:

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

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

And it will do what you want ;)

Using split(regex,limit) as you did will actually split on any character (since . is the regex for any character) and it will basically remove the first few characters

Veselin Davidov
  • 7,031
  • 1
  • 15
  • 23
  • as simple as that lmao – Alan Feb 12 '19 at 08:38
  • what is the significance of " \\." can u please explain? – dutta.ari Feb 12 '19 at 08:40
  • let me refer to this post aswell https://stackoverflow.com/questions/3674930/java-regex-meta-character-and-ordinary-dot in conjunction to Veselin Davidov's answer – Alan Feb 12 '19 at 08:41
  • It escapes the '.' character. Basically '.' is the regex form of any character – Aritro Sen Feb 12 '19 at 08:41
  • If you're not familiar with regular expressions, check out https://stackoverflow.com/questions/2912894/how-to-match-any-character-in-regular-expression .. or just do some googling ;) – hensing1 Feb 12 '19 at 08:43
2

Solution using java.util.regex package:

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

The Pattern.quote will do the escaping.

Sid
  • 4,893
  • 14
  • 55
  • 110
0

Let me give you guys an alternative solution aswell:

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

you can escape the dot using "[.]" as a string, turning the dot from an regex operator into a literal char

Alan
  • 949
  • 8
  • 26
0

Just change this line

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

to

String data[]=text.split("\\.");
javalearner_heaven
  • 483
  • 1
  • 6
  • 21
0

An alternate solution is to use the sun.net.util.IPAddressUtil to extract the numbers from a given String of an IPAddress as below-

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

The numbers in ByteArray format can be converted to integer array using this solution.

Leo Varghese
  • 165
  • 1
  • 2
  • 12