Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

String.split returning null when using a dot

I got this simple code:

String ip = "1.2.3.4";
String[] ipArray = ip.split(".");
System.out.println(ipArray[1]);

And ipArray is null by the time it hits System.out.println (throws null pointer exception).

My question is why does ipArray stay null even though I'm setting it to split on each of ip's .s?

like image 397
CyanPrime Avatar asked Sep 10 '25 14:09

CyanPrime


2 Answers

Use ip.split("\\."); and your problems will be solved. The problem is that String#split receives a regular expression, the dot (.) symbol is a special character in regular expressions, so you need to escape it for it to be interpreted as a plain dot, also as the backslash is an escape character in Java, you have to escape it too.

like image 101
Luiggi Mendoza Avatar answered Sep 12 '25 04:09

Luiggi Mendoza


. is a special character in regular expressions, which is what is used to split a string.

To get around this, you need to escape the .. That leads us to \. Unfortunately, \ is ALSO a special character in the java string, so that must also be escaped, to make \\.

Our "final" result is ip.split("\\.");

In a related issue, the whole process can be averted entirely. There's no sense in doing something that a standard library already has done for us.

Consider the following

byte[] ipOctets = InetAddress.getByName(ip).getAddress();

The only issue here is to remember that if you want the int value, you have to extract it with & like int octet = ipOctets[0] & 0xFF;

like image 31
corsiKa Avatar answered Sep 12 '25 03:09

corsiKa