2013-06-11 103 views
-1

比方說,我有一個令人困惑的名字,如XX_10231_11_32-33-23_jsv.docJava解析文件名

如何從該文件名只提取11個?

我目前使用

filename.split("_", 3)[2]; 

它提取所有過去11

+0

正則表達式..'*?_ *?_(。*?)_ *' – vidit

+0

@vidit答案是'分裂()'。 – CPerkins

+0

使用split(String正則表達式)方法,沒有限制。例如filename.split( 「_」)[2]; – nikkatsa

回答

1

爲什麼不只是split("_")[2]代替split("_", 3)[2]

String filename="XX_10231_11_32-33-23_jsv.doc"; 
System.out.println(filename.split("_")[2]);//output 11 

無論如何,如果你想 「優化」 split方法,停止分裂後11然後使用split("_", 4)。這將產生四個元素的數組將包含

["XX", "10231", "11", "32-33-23_jsv.doc"] 
1

這裏的問題是3爲限的選擇。這意味着超過第二個分隔符的所有內容都將位於第3個標記中。使用負數限制,以便返回數組中的令牌數量不受限制。

filename.split("_", -1) 

按照split Javadoc中:

限參數控制在施加圖案 數量,並且因此影響所得陣列的長度。如果 的限制值n大於零,那麼該模式將在 之前應用最多n-1次,該陣列的長度將不會大於n,並且該陣列的最後一個條目將包含超出最後匹配的 定界符的所有輸入。如果n是非正數那麼該模式將盡可能多地應用爲 ,並且該數組可以具有任何長度。如果n爲零 那麼該模式將盡可能多地應用,數組 可以具有任何長度,並且尾隨的空字符串將被丟棄。

(重點煤礦)

+0

或者只是調用'split()'而不使用限制參數:'split(「_」)' – iamnotmaynard

+0

@iamnotmaynard是的,這樣會更簡單。但我也想指出'limit'參數的作用。 – rgettman

+1

這很好,因爲它解釋了OP的結果。 – iamnotmaynard