String.split在使用点时返回null

时间:2012-07-12 17:23:26

标签: java arrays string nullpointerexception

我得到了这个简单的代码:

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

ipArray在命中System.out.println时为空(抛出空指针异常)。

我的问题是,为什么ipArray保持为null,即使我将其设置为拆分每个ip的.s?

3 个答案:

答案 0 :(得分:46)

使用ip.split("\\.");,您的问题就会得到解决。问题是String#split接收正则表达式,点(。)符号是正则表达式中的特殊字符,所以你需要转义它才能将它解释为普通点,同样反斜杠是一个在Java中转义字符,你也必须逃脱它。

答案 1 :(得分:41)

.是正则表达式中的特殊字符,用于分割字符串。

要解决此问题,您需要转义.。这导致我们\.不幸的是,\也是java字符串中的特殊字符,因此必须进行转义,以使\\.

我们的“最终”结果是ip.split("\\.");

在相关问题中,可以完全避免整个过程。做一些标准库已经为我们做过的事情是没有意义的。

考虑以下

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

这里唯一的问题是要记住,如果你想要int值,你必须用&提取它,如int octet = ipOctets[0] & 0xFF;

答案 2 :(得分:5)

Pattern.quote(String)也可用于引用整个字符串。这将返回一个将按字面解释的模式,特殊字符将没有特殊含义。在这种情况下,这可能有点过头了,但有时它可能很有用。