2009-12-29 53 views
4

以下Java代碼將打印「0」。我希望這會打印「4」。根據Java API String.split「圍繞給定正則表達式的匹配分割此字符串」。並從鏈接的正則表達式的文件:Java字符串拆分正則表達式不按預期方式工作

預定義字符類
任何字符(可能會或可能不匹配行終止符)

因此,我期望「測試」分裂在每個字符上。我顯然是誤解了一些東西。

System.out.println("Test".split(".").length); //0

+0

我希望這僅僅是爲了好奇,因爲有更容易的方式找到一個字符串的長度.. 。;) – 2009-12-29 14:26:32

回答

6

你是對的:它是在每個字符分割。然而,「分裂」字符不被該函數返回,因此,所得到的0

在Javadoc最重要的部分:「尾隨因此空字符串中不包括所產生的陣列中」。

我想你想要"Test".split(".", -1).length(),但是這將返回5而不是4(有5個「空格」:在T之前一個,在T和e之間一個,其他爲es,st和最後一個之後的最後一個。)

+0

謝謝。我看到現在正在發生什麼。 – Jon 2009-12-29 13:57:34

1

一切都很好。 「測試」分割在每個角色上,所以他們之間沒有角色。如果你想在每個字符上迭代你的字符串,你可以使用charAt和length方法。

2

你必須使用兩個反斜槓,它應該很好地工作: 這裏是例子:

String[] parts = string.split("\\.",-1); 
相關問題