String.split在使用点时返回null

我有这个简单的代码:

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

并且当它命中System.out.println时, ipArray为null(抛出空指针exception)。

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

使用ip.split("\\."); 你的问题将得到解决。 问题是String#split接收正则表达式,点(。)符号是正则表达式中的特殊字符,因此您需要将其转义为将其解释为普通点,同时反斜杠是转义字符在Java中,你也必须逃避它。

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

要绕过这个,你需要逃避. 。 这导致我们\. 不幸的是, \也是java字符串中的一个特殊字符,因此必须进行转义才能生成\\.

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

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

考虑以下

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

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

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