2012-12-18 34 views
-2

爲什麼這段代碼不起作用?爲什麼這個String.split()拆分我的字符串?

String s = "0.1"; 
String[] sa = s.split("."); 
System.out.println(sa[0] + "Hello " + sa[1]); 

它給人的錯誤爲:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0 
    at com.test.A.main(A.java:8) 
+2

嘗試'「\\。」'而不是「。」。這意味着任何角色。 –

+0

@Peter Lawrey我想刪除我的問題:(:(:(:(你們這麼嚴格 – Thinker

+5

爲什麼這個表決不成立?如果你不知道'String.split'是以正則表達式爲參數,並假設(不小心,但合理),它需要一個字符串完全匹配,那麼從這裏觀察到的錯誤沒有明顯的飛躍到正確的原因。我不認爲這個問題是愚蠢的。 –

回答

4

String.split不會由另一個字符串分割字符串,它由regular expression將其分解。 .在正則表達式中有特殊含義(它代表「任何字符」)。所以當你想明確地匹配點時,你需要逃避它們。改爲使用"\\."

2

試試這個:

String[] sa = s.split("\\."); 
+0

任何解釋? – Thinker

2

使用

String[] sa = s.split("\\."); 

.點是一個特殊的正則表達式字符和將匹配任何除非你逃脫它。您的ArrayIndexOutOfBoundsException發生是因爲您超出了數組的範圍。

您擁有它的方式sa.length將爲0,因此任何數組訪問都會導致您的異常。

0

轉義"." - 它被視爲特殊字符。您可能想要閱讀this

String[] sa = s.split("\\."); 
1

拆分是基於正則表達式的。見第二段here

總之。答案是逃避,在

split("\\.") 
相關問題