Метод matches строки

165
18 февраля 2019, 21:50

Есть строка из которой нужно выбрать все слова, которые начинаются с большой буквы и записать в новую строку, а с маленькой также в новую строку. Понимаю, что нужно использовать регулярные выражения, но к сожалению из этого ничего не получилось

Данный код выводит все слова которые начинаются с большой буквы в новую строку, но как вывести остальные слова, которые начинаются с маленькой буквы в другую строку?

Pattern p1 = Pattern.compile ("[A-Z][a-z]+");
Matcher m= p1.matcher("Dont be shy Just be yourself");
while (m.find())
{
    System.out.print(m.group());
}
Answer 1

Решение, которое вам требуется:

Pattern pattern = Pattern.compile("((?<capital>[A-Z][a-z']*)|(?<regular>[a-z']+))");
Matcher matcher = pattern.matcher("Don't be shy. Just be yourself.");
StringBuilder capital = new StringBuilder();
StringBuilder regular = new StringBuilder();
while (matcher.find()) {
    String upper = matcher.group("capital");
    String lower = matcher.group("regular");
    if (upper != null) {
        capital.append(upper).append(' ');
    } else {
        regular.append(lower).append(' ');
    }
}
if (capital.length() > 0) {
    capital.setLength(capital.length() - 1);
}
if (regular.length() > 0) {
    regular.setLength(regular.length() - 1);
}
System.out.println(capital);
System.out.println(regular);

Напечатает:

Don't Just
be shy be yourself
Answer 2

Если не получается с регулярными выражениями, может будет полезен вариант без них. Вы можете использовать метод Character.isUpperCase(char);

    String text = "aaa Bbb cCc";
    String[] split = text.split(" ");
    StringBuilder upBuilder = new StringBuilder();
    StringBuilder lowBuilder  = new StringBuilder();
    for (String word : split){
        if (Character.isUpperCase(word.charAt(0))) upBuilder.append(word + " ");
        else lowBuilder.append(word + " ");
    }
    System.out.println(upBuilder.toString().trim());
    System.out.println(lowBuilder.toString().trim());

или вот вариант с выражениями и удалением знаков припинания

    String text = "Aaa,    ;;;Bbb---+ - cCc;;dDD";
    text = " " + text;
    text = text.replaceAll("\\p{Punct}", " ");
    String up = text.replaceAll("\\W[a-z][A-z]*", "");
    up = up.replaceAll("\\p{Space}+", " ").trim();
    String low = text.replaceAll("\\W[A-Z][A-z]*", "");
    low = low.replaceAll("\\p{Space}+", " ").trim();
    System.out.println(up);
    System.out.println(low);
READ ALSO
Кодировки Java при работе с консолью

Кодировки Java при работе с консолью

Моя маленькая программа работает в консоли и читает данные из файла и показывает пользователю условно говоря и при соблюдении некоторых...

139
не работает hover в svg

не работает hover в svg

Добрый день столкнулся с такой проблемой , что hover не работает полноценно в svgПытаюсь менять цвет при наведении на path или класс какой нибудь:

157
Ошибка в двумерном массиве

Ошибка в двумерном массиве

Создается двумерный массив, который заполняется знаком -, а при i == 2, строка должна заполниться знаком +, но этого не происходитПочему?

158