2012-10-17 179 views
1
public static void main(String[] args){ 
    String testStr = "Test test. Test 2. Test3?"; 
    String[] newStr = testStr.split(".?"); 
    System.out.print(newStr[0]); 
} 

我得到一個數組索引超出這個界限的異常,並且newStr的長度是0.我想把這個句子打斷成「。」上的標記。和「?」。我犯了什麼錯誤?Java將字符串拆分爲「。」。和「?」

回答

4

String#split將正則表達式作爲參數進行拆分。 .?在正則表達式中有特殊含義。

您可以使用字符類拆就其中一方:

testStr.split("[.?]"); 

在字符類,你不需要逃避他們,因爲特殊字符失去字符類裏面的意思。

如果正常管|使用它,你需要逃避它: -

testStr.split("\\.|\\?"); 

更新: - 如果你要保留的分隔符:

testStr.split("(?<=[.?])") 
+0

謝謝。有什麼方法可以保留令牌中的句號和問號? – user1436111

+0

@ user1436111我已添加該代碼。看看。 –

+0

非常感謝。 – user1436111

4

你必須逃避那些角色。使用"\\.""\\?"。這是因爲String#split收到正則表達式,並且這兩個字符都是正則表達式中的特殊字符。

4

您需要轉義.?。使用:

String[] newStr = testStr.split("\\.|\\?"); 
+0

我沒有知道在正則表達式中將「a或b」分組的括號是可選的 –

相關問題