2009-10-31 106 views
4

我試圖得到一個文件名的擴展,但由於某些原因,我不能讓分裂的工作:爲什麼這個分裂()失敗?

System.out.println(file.getName()); //gNVkN.png 
System.out.println(file.getName().split(".").length); //0 

我在做什麼錯?

回答

20

split()需要一個正則表達式,而不是一個分離器串分割通過。正則表達式"."意味着「任何單個字符」,所以它會分裂的任何東西。拆就字面點使用:

file.getName().split("\\.") 
+1

一般情況下,你可以使用 Pattern.quote(STR) 以獲得嚴格匹配'str'正則表達式。 – Ramon 2009-10-31 11:12:57

+1

很好的答案,謝謝! – etheros 2009-10-31 11:14:25

+0

難道有人說** **正則表達式:d http://xkcd.com/208/ – 2009-10-31 11:56:30

5

也許你應該重讀與API文檔的split(java.lang.String)

你傳遞的字符串是一個正則表達式

嘗試使用

split("\\.") 

您需要的雙反斜線因爲\.是在Java字符串無效逃逸。所以你需要在javastring中逃避反斜槓本身。

4

String.split()要求在其參數中使用正則表達式,在正則表達式中,.將匹配任何字符。爲了使它工作,你需要添加一個\,像這樣:

System.out.println(file.getName().split("\\.").length); 

你需要一個反斜槓逃脫點,所以正則表達式知道你想要一個實際點。你需要其他的反斜槓逃脫第一個反斜槓,即告訴Java的你想擁有你的字符串中的實際反斜槓。

閱讀String.splitregular expressions的Javadoc以獲得更多信息。