我得到了这个简单的代码:
String ip = "1.2.3.4";
String[] ipArray = ip.split(".");
System.out.println(ipArray[1]);
并且ipArray
在它命中时为空System.out.println
(抛出空指针异常)。
我的问题是为什么即使我将 ipArray 设置为在每个 ip 的 .s 上拆分,ipArray 仍保持为空?
我得到了这个简单的代码:
String ip = "1.2.3.4";
String[] ipArray = ip.split(".");
System.out.println(ipArray[1]);
并且ipArray
在它命中时为空System.out.println
(抛出空指针异常)。
我的问题是为什么即使我将 ipArray 设置为在每个 ip 的 .s 上拆分,ipArray 仍保持为空?
使用ip.split("\\.");
,您的问题将迎刃而解。问题是String#split接收正则表达式,点 (.) 符号是正则表达式中的特殊字符,因此您需要将其转义以将其解释为普通点,也因为反斜杠是转义字符在 Java 中,你也必须逃避它。
.
是正则表达式中的特殊字符,用于分割字符串。
要解决这个问题,您需要逃避.
. 这导致我们\.
不幸的是,\
也是 java 字符串中的一个特殊字符,所以也必须转义,以使\\.
我们的“最终”结果是ip.split("\\.");
在一个相关的问题上,整个过程可以完全避免。做标准库已经为我们做的事情是没有意义的。
考虑以下
byte[] ipOctets = InetAddress.getByName(ip).getAddress();
这里唯一的问题是要记住,如果你想要 int 值,你必须用&
like提取它int octet = ipOctets[0] & 0xFF;
Pattern.quote(String)也可以用来引用整个字符串。这将返回一个将按字面解释的模式,特殊字符没有特殊含义。在这种情况下,这可能有点矫枉过正,但有时它可能很有用。
我们也可以使用 split ("[.]")
String s = "abcd.jpg";
String[] strarry = s.split ("[.]");
星[0]=abcd,星[1]=jpg