在java中使用正则表达式和split方法时遇到问题

use*_*491 2 java regex split

我有一个字符串列表,我需要解析名称和版本,例如一些字符串看起来像这样:

应用程序名称1.2.5
AppName 7.8.b
应用程序名称7.0

我希望有两个字符串列表,其中一个带有应用程序名称,另一个带有版本号,因此一个列表是:

应用名称
AppName
应用名称

然后另一个列表将是

1.2.5
7.8.b
3.0

我曾尝试使用空格来分割字符串,但如果名称始终位于索引0并且版本始终位于索引1中,那么这将是最简单的.所以我尝试了"\\ d"(按数字分割),但是不像我想的那样工作.任何帮助将不胜感激,并提前感谢

Mik*_*uel 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);
  ...
}
Run Code Online (Sandbox Code Playgroud)

要了解正则表达式的工作原理,请查看以下内容:

^
Run Code Online (Sandbox Code Playgroud)

意味着在开始时开始匹配

(
Run Code Online (Sandbox Code Playgroud)

启动组1,它将保留版本名称

\\D*
Run Code Online (Sandbox Code Playgroud)

以任意数量的非数字开头

[^\\d\\s]
Run Code Online (Sandbox Code Playgroud)

以某种既不是数字也不是空间的东西结尾.

)
Run Code Online (Sandbox Code Playgroud)

第1组结束

\\s*
Run Code Online (Sandbox Code Playgroud)

可能与版本号分隔零个或多个空格.

(

第2组包含版本号.

\\d
Run Code Online (Sandbox Code Playgroud)

它以数字开头

.*
Run Code Online (Sandbox Code Playgroud)

并继续其余的输入.

)
Run Code Online (Sandbox Code Playgroud)

结束.