Помогите решить задачу с регулярными выражениями, уж очень тяжко мне они даются.
Задание:
Задание должно быть решено с помощью регулярных выражений без использования контейнерных классов.
Вход: текст (может состоять из латиницы и кириллицы). Выход: исходный текст, но регистр первого символа каждого слова, которое состоит из трех и более символов, должен быть интвертирован.
Словом считать последовательность содержащую только буквы (все остальные символы в состав слова не входят). Создать статический метод convert, который преобразовывает вход в выход.
Заглушка метода
public static String convert(String input) {
...
}
Пример Input data
When I was younger
I never needed
Пример Output
when I Was Younger
I Never Needed
Вот так можно сделать:
public class Test {
public static void main(String[] args) {
System.out.println(convert("When I was younger I never needed"));
}
public static String convert(String input) {
StringBuilder sb = new StringBuilder(input);
Pattern p = Pattern.compile("[\\W&&[\\d]]?[\\w&&[\\D]]+");
Matcher m = p.matcher(input);
while (m.find()) {
if (m.group().length() >= 3) {
if (Character.isUpperCase(sb.charAt(m.start()))) {
sb.setCharAt(m.start(), Character.toLowerCase(sb.charAt(m.start())));
} else {
sb.setCharAt(m.start(), Character.toUpperCase(sb.charAt(m.start())));
}
}
}
return sb.toString();
}
}
Если вставить цифры, или другие символы внутрь слов (например строка: When I wa%s you35nger I ne$ver nee-ded), то они также считаются разделителями слов и программа справляется с этим. В итоге получается строка: when I wa%s You35Nger I ne$Ver Nee-Ded
Сборка персонального компьютера от Artline: умный выбор для современных пользователей