Вводится одна строка целиком. Необходимо вывести те слова данной строки, которые начинаются с буквы из интервала от a до h.
Словом считается совокупность букв и символов от пробела до пробела. Слова могут быть как в верхнем, так и нижнем регистре.
Выводить слова необходимо каждый раз с новой строки.
Пример
Ввод: It becomes dark very fast here
Вывод: becomes
dark
fast
here
Вроде бы я как я понял, сначала нужно перевести строку в массив строк с помощью регулярного выражения, а затем нужен цикл, в котором перебирая строки в массиве, с помощью charAt() нужно получить первую букву, которую уже проверять на верность условию и если всё ок - выводить. Вот как раз цикл и не могу придумать...подскажите, как лучше его сделать?
public class TestClass {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
String s = in.nextLine();
String[] strings = s.split(" ");
System.out.println(Arrays.toString(strings));
// вероятно, здесь должен быть цикл
}
}
for(String str : strings)
if(str.matches("^[a-h]\\w*"))
System.out.println(str);
Если нужно, чтобы включались слова, оканчивающиеся на 's вместе с одним словом, которое идёт сразу после вышеупомянутого:
String s = "dark's ana here come shot";
Pattern pattern = Pattern.compile("(?<=^| )(\\w+'s )?[a-h]\\w*(?= |$)");
Matcher matcher = pattern.matcher(s);
while(matcher.find())
System.out.println(matcher.group());
Получаем из строки массив слов, и помещаем его в TreeSet. Применяем метод TreeSet.subSet:
String str = "It becomes dark very fast here";
TreeSet<String> set = Arrays.stream(str.split("\\s+"))
.collect(Collectors.toCollection(TreeSet::new));
// поиск слов в сете от 'a' до 'h'
System.out.println(set.subSet("a", "hz")); // [becomes, dark, fast, here]
Сборка персонального компьютера от Artline: умный выбор для современных пользователей