2014-10-15 3 views
2

Я работал над форматированием строки, и мне было любопытно, если бы я делал это наиболее эффективным способом.Форматирование массива String в Java

Предположим, у меня есть массив строк:

String ArrayOne[] = {"/test/" , "/this/is/test" , "/that/is/" "/random/words" } 

Я хочу результат Массив быть

String resultArray[] = {"test", "this_is_test" , "that_is" , "random_words" } 

Это довольно неаккуратно и грубой силы, как.

for(char c : ArrayOne[i].toCharArray()) { 
     if(c == '/'){ 
      occurances[i]++; 
     } 
    } 

Сначала я сосчитать число «/» в каждой строке, как выше, а затем с помощью этих счетчиков, я считаю IndexOf («/») для каждой строки и добавить «_» соответственно.

Как вы можете видеть, это становится очень грязным.

Есть ли более эффективный способ сделать это, кроме грубой силы, которую я делаю?

Спасибо!

+0

Ознакомьтесь с методами 'replace' и' replaceAll' класса 'String'. Также узнайте, как использовать регулярное выражение для определения начала или конца строки. –

ответ

3

Вы можете использовать replaceAll и replace следующим образом:

String resultArray[] = new String[ArrayOne.length]; 
for (int i = 0; i < ArrayOne.length; ++i) { 
    resultArray[i] = ArrayOne[i].replaceAll("^/|/$", "").replace('/', '_'); 
} 

Метод replaceAll ищет строку для совпадения с регулярным выражением на первый аргумент, и заменяет каждый матч с текстом во втором аргументе ,

Здесь мы используем его сначала, чтобы удалить ведущие и конечные косые черты. Мы ищем косые черты в начале строки (^/) или конец строки (/$) и не заменяем их ничем.

Затем мы заменяем все остальные слэши символами подчеркивания, используя replace.

+0

Вы видели это «/ test /» будет этот «тест»? –

+0

@KickButtowski И в чем проблема с этим? – Pshemo

+0

@KickButtowski: да, вот для чего первый «replaceAll». – Mac

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