如何在反斜杠和下划线中拆分java字符串

时间:2014-12-05 09:31:34

标签: java

我有这个字符串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: enter image description here

namePath.split("_", 3)

enter image description here

3 个答案:

答案 0 :(得分:2)

基于下划线分割,该下划线前面没有数字和点,并从所需的索引中获取值。

(?<!\d)_|\.

Online demo

或者,您也可以使用Positive Lookbehind代替Negative Lookbehind

(?<=\D)_|\.

输出数组:

[0] >  config 
[1] >  wdiCore 
[2] >  20_2 
[3] >  xls

从索引1和2的捕获组中获取所需的值

([^_]*)_(\d+(_\d+)?)\.

Online demo

示例代码:

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个字符串的列表)