2011-06-10 123 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)"

尝试即后跟一个数字的空间这是不消耗(通过零宽度正预测先行)