Данный текст. Разбейте это на слова. Через потоки - PullRequest
1 голос
/ 06 августа 2020

Данный текст. Разбейте это на слова. Через потоки: оставьте только те слова, которые начинаются с «а», преобразуйте их все в нижний регистр, соберите все слова в коллекцию. Распечатайте этот сборник (каждое слово с новой строки). Может есть другие решения?

public class Task_1 {

public static void main(String[] args) {

    String text = "A new report on the. state of American youth says!!!" +
            " teenagers, are very concerned about the direction their nation is taking. ";
    Stream.of(text.split("[^A-Za-zА-Яа-я]+"))
            .map(String::toLowerCase)
            .filter(n -> n.startsWith("a"))
            .sorted()
            .collect(Collectors.toList())
            .forEach(System.out::println);
}
}

1 Ответ

1 голос
/ 06 августа 2020

Вы можете сопоставить все слова, начинающиеся с a, используя (?i)\ba\p{L}*\b regex, поместить совпадения в список строк, переведя их в нижний регистр, затем отсортировать список и распечатать элементы:

String text = "A new report on the. state of American youth says!!!" +
        " teenagers, are very concerned about the direction their nation is taking. ";
Pattern p = Pattern.compile("(?i)\\ba\\p{L}*\\b");
Matcher m = p.matcher(text);
List<String> res = new ArrayList<>();
while(m.find()) {
    res.add(m.group().toLowerCase()); // Add to list turning to lower case
}
Collections.sort(res);     // Sort
for (String s: res)
    System.out.println(s); // Print

См. Демонстрацию Java в Интернете .

См. Демонстрацию регулярного выражения . Подробно:

  • (?i) - режим без учета регистра
  • \b - граница слова
  • a - a буква
  • \p{L}* - 0 и более букв
  • \b - граница слова.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...