我得到這個簡單的代碼時,返回null:String.split使用點
String ip = "1.2.3.4";
String[] ipArray = ip.split(".");
System.out.println(ipArray[1]);
而且ipArray
是它擊中System.out.println
的時間空(拋出空指針異常)。
我的問題是爲什麼ipArray保持null,即使我將它設置爲分割每個IP的.s?
我得到這個簡單的代碼時,返回null:String.split使用點
String ip = "1.2.3.4";
String[] ipArray = ip.split(".");
System.out.println(ipArray[1]);
而且ipArray
是它擊中System.out.println
的時間空(拋出空指針異常)。
我的問題是爲什麼ipArray保持null,即使我將它設置爲分割每個IP的.s?
使用ip.split("\\.");
你的問題將得到解決。問題是String#split接收到一個正則表達式,點(。)符號是正則表達式中的一個特殊字符,所以您需要將其轉義爲被解釋爲普通點,並且反斜槓是Java中的轉義字符,你也必須逃避它。
好的,謝謝。我會接受一次,我可以^ _ ^ – CyanPrime 2012-07-12 17:28:06
.
是正則表達式中的一個特殊字符,用於分割字符串。
要解決這個問題,您需要轉義.
。這導致我們\.
不幸的是,\
也是在java字符串中的特殊字符,所以還必須逃脫,使\\.
我們的「最終」結果是ip.split("\\.");
在一個相關的問題,整個過程可以完全避免。做一些標準庫已經爲我們做的事情沒有意義。
考慮以下
byte[] ipOctets = InetAddress.getByName(ip).getAddress();
唯一這裏的問題是要記住,如果你想要的int值,你有提取它&
像int octet = ipOctets[0] & 0xFF;
Pattern.quote(String)也可以用來引用整個字符串。這將返回一個將從字面上解釋的模式,特殊字符將沒有特殊含義。在這種情況下,這可能是矯枉過正的,但有時它可能會有用。
您正在分割任何字符,因此所有字符都將被分割,而不會在數組中留下任何內容。 [string.split](http://docs.oracle.com/javase/1.4.2/docs/api/java/lang/String.html#split(java.lang.String))需要一個正則表達式。 – mellamokb 2012-07-12 17:25:14
Dot'.'表示「任何字符」:)您需要一個「實際點」'[。]' – dasblinkenlight 2012-07-12 17:25:21
準確地說,根據模式(DOTALL),'.'將匹配或不匹配換行符。我可以添加 – nhahtdh 2012-07-12 17:26:34