2014-12-05 3 views
0

у меня есть эта строка config_wdiCore_20_2.xlsКак разбить строку Java на обратной косой черты и подчеркнуть

Я хочу разделить это за то, что на выходе этот результат:

модуль: 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

Как я могу разделить этот выход, чтобы иметь модуль СОе и версию кода?

UPDATE:

namePath.split("_") 

Ouptut: enter image description here

namePath.split("_", 3) 

enter image description here

+0

@DavidWallace да так, что я не имею хороший результат для версии, потому что used underscore – Mercer

+0

Пробовал ли вы 'namePath.split (" _ ", 3)'? – jhamon

+0

@jhamon это похоже на хорошее решение :) – Mercer

ответ

1

Вы можете использовать String.lastIndexOf(int) т o получить последнюю обратную косую черту. Затем отделите расширение «.xls» и, наконец, разделите на _ с лимитом 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 
1
namePath.split("_", 3) 

Разделить namePath строка на первых 2 _ символов (возвращает список из 3 строк)

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); 
} 
+0

Это лучший ответ здесь, потому что он позволяет любое количество символов подчеркивания в части имени файла, которая предшествует числу. Однако в первой строке вы должны изменить «затем» на «предшествовать», иначе объяснение не имеет смысла. –

+0

Спасибо @DavidWallace Я его исправил – Braj

Смежные вопросы