Условие задачи
Задача взята с сайта e-olymp
Определить количество предложений в заданном фрагменте текста на английском языке, количество символов в котором не превышает 250. Гарантируется, что в тексте отсутствуют тире, дефисы, цифры и числа.
Тесты
Входные данные: строка — фрагмент текста
Выходные данные: количество предложений в заданной строке
№ | Входные данные | Выходные данные |
1 | Hello World! | 1 |
2 | Don’t fall in love with programming languages: they hurt | 0 |
3 | Is this a string!? This string… | 2 |
4 | Winter. Winter? Winter! | 3 |
Код
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
import java.util.Scanner; import java.util.regex.*; public class Main { public static void main (String[] args) { String string; int sentenceCount = 0; Pattern pattern = Pattern.compile("[.!?]+"); Matcher matcher; Scanner scanner = new Scanner(System.in); string = scanner.nextLine(); matcher = pattern.matcher(string); while (matcher.find()) sentenceCount++; System.out.println(sentenceCount); } } |
Код доступен на ideone
Результаты проверки доступны на e-olymp
Пояснение
Для хранения заданной строки будем использовать переменную string типа String, которая будет проинициализирована значением из стандартного потока ввода, а для хранения результата — переменную sentenceCount типа int , которую проинициализируем числом 0. Переменные объявляются в начале программы.
Каждое предложение может заканчиваться точкой, восклицательным знаком или вопросительным знаком, или же комбинацией этих символов (например, многоточием). Для анализа строки воспользуемся средствами для работы с регулярными выражениями. Для хранения шаблона, по которому будет производиться поиск, используется класс Pattern, переменной типа которого присваивается шаблон, получаемый из строки-регулярного выражения с помощью статического метода этого класса Pattern.compile() . В данном случае переменная pattern инициализируется шаблоном, получаемым из регулярного выражения [.!?]+, которое соответствует условиям задачи
Для того, чтобы произвести сравнение строки с шаблоном, используется класс Matcher, переменной типа которого нужно присвоить возвращаямое значение метода match() класса Pattern , который принимает строку. Для подсчета количества предложений воспользуемся методом find() класса Matcher, который проверяет, есть ли далее в данной строке подстрока, соответствующая заданному шаблону, и возвращает true , если подстрока найдена, или false , если нет. Подсчет количества предложений производится путем вызова данного метода в цикле до тих пор, пока он не вернет false — результатом подсчета будет количество итераций цикла.
Результат работы программы — вывод значения переменной sentenceCount.