2011-06-10 122 views
2

使用正則表達式與分割方法我有我需要解析的名稱和版本字符串列表,例如一些字符串是這樣的:遇到問題在Java中

程序名稱1.2.5
AppName的7.8.b
應用程序名稱7.0

我想有一個與應用程序名稱字符串一兩個列表和一個帶版本號這樣一個清單:

程序名稱
AppName的
應用程序名稱

那麼其他的名單將在

1.2.5
7.8.b
3.0

我剛纔使用空間分割字符串嘗試,但它會如果名稱始終位於索引0,並且版本始終位於索引1,那麼最簡單。因此,我嘗試了「\\ d」(按數字分割),但這並不像我以爲的那樣工作。任何幫助將不勝感激,並提前感謝

回答

5

斯普利特是不是真的適合在這裏。嘗試使用匹配器,並使用group方法獲取應用程序名稱和版本。

Pattern p = Pattern.compile("^(\\D*[^\\d\\s])\\s*(\\d.*)", Pattern.DOT_ALL); 
Matcher m = p.matcher(myString); 
if (m.find()) { 
    String appName = m.group(1); 
    String versionNumber = m.group(2); 
    ... 
} 

要了解正則表達式如何工作,看看下面:

^ 

手段開始起步匹配

(

開始第1組將舉行版本名稱

\\D* 

開始於任何數字的非數字

[^\\d\\s] 

並且以非數字和空格的東西結束。這可能會從版本號由零個或多個空格隔開組1

\\s* 

) 

端。

第2組中包含的版本號。

\\d 

它以一個數字

.* 

,並繼續輸入的其餘部分。

) 

結束。

0

" (?=\\d)"

嘗試即後跟一個數字的空間這是不消耗(通過零寬度正預測先行)