2016-03-20 6 views
4

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

String input = "Creation of book orders" 

в

String output = "CreationOfBookOrders" 

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

input.replaceAll("\\s\\w", "(\\w)"); 
input.replaceAll("\\s\\w", "\\w"); 

но здесь строка заменяет пространство и слово символом 'w' вместо слова.

Я не в состоянии использовать никакие WordUtils или StringUtils или такие классы полезности. В противном случае я мог бы заменить все пробелы пустой строкой и применить WordUtils.capitalize или аналогичные методы.

Как еще (желательно с использованием регулярного выражения) я могу получить выше output от input.

+0

Почему не вы в состоянии использовать функции библиотеки? –

+0

@noob Я пытаюсь сгенерировать код с помощью 'xtext' и' xtend'. Я не уверен, почему, но я не могу импортировать дополнительные банки или зависимости. Я вынужден использовать базовые методы Java, настроенные в них. –

+2

В Notepad ++ вы можете искать '\ s (\ w)' и заменять на '\ U $ 1' - не уверены, поддерживает ли Java что-то подобное. –

ответ

2

Я не думаю, что вы можете сделать это с помощью String.replaceAll. Единственные изменения, которые вы можете внести в заменяющей строке, - это интерполяция групп, сопоставленных регулярному выражению.

javadoc для Matcher.replaceAll объясняет, как обрабатывается строка замены.

Вам понадобится использовать петлю. Вот простой вариант:

StringBuilder sb = new StringBuilder(input); 
Pattern pattern = Pattern.compile("\\s\\w"); 
Matcher matcher = pattern.matcher(s); 
int pos = 0; 
while (matcher.find(pos)) { 
    String replacement = matcher.group().substring(1).toUpperCase(); 
    pos = matcher.start(); 
    sb.replace(pos, pos + 2, replacement); 
    pos += 1; 
} 
output = sb.toString(); 

(Это может быть сделано более эффективно, но это сложно.)

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