2013-12-05 3 views
0

Я пытаюсь проанализировать данный путь к проекту или пакету в проекте, чтобы я мог построить из него полезное имя.Разбор пути для получения желаемого имени

Я работаю с регулярным выражением, но у меня возникают проблемы.

Примеры того, что я хочу (supplied string =>desired one):

"C:/Users/IDPWorkspace/moneyTestProject/bin" => moneyTestProject 
"C:/Users/IDPWorkspace/moneyTestProject/bin/moneyScenario" => moneyTestProject_moneyScenario 

До сих пор я получил

path.toString().substring(path.toString().indexOf("bin")+4) 
       .replace('/', '.').replace('\\', '.');` 

, который делает хорошо в получении все, мимо корзины, но не уверен, как это сделать другой материал ...

+0

Я ничего не знаю о Java, но не будет ли так же легко разбить строку на '/' прямую косую черту и удалить индексы 0, 1, 2 и 4 или выбрать индексы 3 и 5 – gwillie

ответ

1

У меня нет компилятора Java, но вы можете попробовать этот псевдо-иш код:

String[] delimiters = {"/", "\\"}; 
String[] tokens = path.Split(delimiters); 

StringBuilder result = new StringBuilder(); 

for(int i = 0; i < tokens.Length; i++) 
{ 
    if(tokens[i].toLower().equals("bin") && (i > 0)) 
    { 
     result.append(tokens[i-1]); 
     for(int j = i+1; j < tokens.Length; j++) 
     { 
      result.append("_" + tokens[j]); 
     } 
     break; 
    } 
} 

String finalPath = result.toString(); 
+1

Пожалуйста, измените 'tokens [i] .toLower() ==" bin "' token [я] .toLower(). равно ("бин") '. У меня аллергия на сравнение строк с '==' даже в псевдокоде. Спасибо :) – Pshemo

+0

Хороший звонок! Береженого Бог бережет. – nolegs

0

Не могли бы вы использовать /([^/]*)/bin/?(.*)? Заменить обратную ссылкой 1 и 2 следующим образом:

http://regex101.com/r/cZ4lM3

Затем вы должны раздеться завершающей _ в случае 2 не совпадают. (Или тест на 2 и присоединиться _)

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