Есть текст в формате:
Люблю_грозу в_начале_Мая, "Когда весенний_первый_Гром",
как бы Резвяся_и Играя, Грохочет в_небе_голубом.
Должно стать:
ЛюблюГрозу вНачалеМая, "Когда весенний_первый_Гром",
как бы РезвясяИ Играя, Грохочет вНебеГолубом.
Поясню, нужно убрать все подчеркивания, кроме тех что в кавычках, там все должно быть без изменений. С великой подачи мастера регулярных выражений (sercxjo) мы смогли разобраться с подчеркиванием ("_(?=([^\"]*[^\\\\])(\"([^\"\\\\]|\\\\\\.)*\"[^\"]*)*$)"), но теперь нам надо написать регулярку которая подымает регистр букв стоящих после подчеркивания, но так же не трогает текст в кавычках.
Ответ
Вам нужен класс Matcher, код примерно следующий:
public static void main(String[] args) throws InterruptedException {
String regex = "_[а-яА-ЯёЁъЪ](?=([^\"]*[^\\\\])(\"([^\"\\\\]|\\\\.)*\"[^\"]*)*$)";
String str = "Люблю_грозу в_начале_Мая, \"Когда весенний_первый_Гром\", как бы Резвяся_и Играя, Грохочет в_небе_голубом.";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(str);
while (matcher.find()){
String s = str.substring(matcher.end()-1,matcher.end()).toUpperCase();
str = str.replace(str.substring(matcher.start(), matcher.end()),s);
matcher.reset(str);
}
System.out.println(str);
}
Единственное, я забыл как получить сразу совпадения по регулярке, поэтому код можно улучшить.
Комментариев нет:
Отправить комментарий