我有这个字符串config_wdiCore_20_2.xls
我想拆分它以输出这个结果:
模块:wdiCore
版本:20_2
我的Java:
String XLS_PPT_FILE = "D:\\xxx\\Excel\\yyyy\\config_wdiCore_20_2.xls"
String[] path = XLS_PPT_FILE.split("\\\\");
String namePath = path[path.length-1];
println(namePath);
输出:
config_wdiCore_20_2.xls
如何将此输出拆分为coe模块和代码版本?
更新:
namePath.split("_")
Ouptut:
namePath.split("_", 3)
答案 0 :(得分:2)
基于下划线分割,该下划线前面没有数字和点,并从所需的索引中获取值。
(?<!\d)_|\.
或者,您也可以使用Positive Lookbehind代替Negative Lookbehind
(?<=\D)_|\.
输出数组:
[0] > config
[1] > wdiCore
[2] > 20_2
[3] > xls
从索引1和2的捕获组中获取所需的值
([^_]*)_(\d+(_\d+)?)\.
示例代码:
Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(str);
if(m.find()){
String module = m.group(1);
String version = m.group(2);
}
答案 1 :(得分:1)
您可以使用String.lastIndexOf(int)
获取最后一个反斜杠。然后去掉扩展名&#34; .xls&#34;最后由_
分割,限制为3(因此您的版本保持一个String
)。像,
public static void main(String[] args) {
String XLS_PPT_FILE = "D:\\xxx\\Excel\\yyyy\\config_wdiCore_20_2.xls";
int pos = XLS_PPT_FILE.lastIndexOf('\\');
String baseName = (pos > -1) ? XLS_PPT_FILE.substring(pos + 1)
: XLS_PPT_FILE;
pos = baseName.indexOf(".xls");
if (pos > -1) {
baseName = baseName.substring(0, pos);
}
String[] parts = baseName.split("\\_", 3);
System.out.printf("module: %s%nversion: %s%n", parts[1], parts[2]);
}
输出(按要求)
module: wdiCore
version: 20_2
答案 2 :(得分:1)
namePath.split("_", 3)
在前2个namePath
字符上拆分_
字符串(返回3个字符串的列表)