在java中使用split方法时遇到问题
我有一个需要解析名称和版本的字符串列表,例如一些字符串如下所示: 应用程序名称1.2.5在java中使用split方法时遇到问题,java,regex,split,Java,Regex,Split,我有一个需要解析名称和版本的字符串列表,例如一些字符串如下所示: 应用程序名称1.2.5 AppName 7.8.b 应用程序名为7.0 我想要两个字符串列表,一个是应用程序名,另一个是版本号,所以一个列表是: 应用程序名称 AppName 应用程序名称 那么另一个列表就是 1.2.5 7.8.b 3.0 我尝试过使用空格来拆分字符串,但是如果名称始终位于索引0中,而版本始终位于索引1中,这将是最简单的。所以我尝试了“\\d”(按数字分割),但这并不像我想象的那样有效。任何帮助我们都将不胜感激,
AppName 7.8.b
应用程序名为7.0 我想要两个字符串列表,一个是应用程序名,另一个是版本号,所以一个列表是: 应用程序名称
AppName
应用程序名称 那么另一个列表就是 1.2.5
7.8.b
3.0
我尝试过使用空格来拆分字符串,但是如果名称始终位于索引0中,而版本始终位于索引1中,这将是最简单的。所以我尝试了“\\d”(按数字分割),但这并不像我想象的那样有效。任何帮助我们都将不胜感激,提前感谢在这里拆分并不合适。尝试改用matcher,并使用该方法获取应用程序名称和版本
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
它以一个数字开头
.*
并继续其余的输入
)
结束。尝试使用“(?=\\d)”
这是一个空格,后跟一个未使用的数字(通过零宽度正向前瞻)