我有一个字符串列表,我需要解析名称和版本,例如一些字符串看起来像这样:
App Name 1.2.5
AppName 7.8.b
App Name 7.0
我希望有两个字符串列表,一个带有应用程序名称,另一个带有版本号,所以一个列表是:
App Name
AppName的
应用名称
然后另一个列表将是
1.2.5
7.8.b
3.0
我曾尝试使用空格来分割字符串,但如果名称始终位于索引0且版本始终位于索引1中,则最简单。所以我尝试了“\\ d”(按数字分割)然而,这并没有像我想象的那样奏效。任何帮助将不胜感激,并提前感谢
答案 0 :(得分: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
以数字
开头.*
并继续输入其余部分。
)
结束。
答案 1 :(得分:0)
尝试使用" (?=\\d)"
这是一个空格,后跟一个不是消耗的数字(通过零宽度正向前瞻)