Консольный ввод
Разбор и форматирование строк может применяться, в том числе, для взаимодействия с пользователем в консольном приложении. Вам уже известна функция println
, предназначенная для вывода информации на консоль. Комбинируя её с функцией String.format
или со строковыми шаблонами, программа может обеспечить вывод на консоль в нужном пользователю формате.
Для ввода информации с консоли в Котлине применяется функция readLine()
, считывающая одну строку с консоли. Строка заканчивается, когда пользователь нажимает клавишу Enter. Функция не имеет параметров, а результат её имеет тип String?
. Знак вопроса после названия типа означает, что, помимо строки, результатом функции может быть также специальная константа null. Смысл этой константы в большинстве случаев — ”некорректный результат”, фактически это ещё один (в дополнении к исключениям) способ поведения в ошибочных ситуациях. Более точный смысл null — некорректная ссылка, не ссылающаяся никуда.
readLine()
использует результат null, когда ввод строки по какой-либо причине завершился неудачно. Это может произойти при достижении особого символа конец файла, который в нормальной ситуации не встречается при вводе в консоли. Операционная система, однако, имеет возможность перенаправления консольного входа программы таким образом, чтобы вместо ввода информации пользователем с клавиатуры программа читала информацию из файла. В случае использования такого перенаправления действительно возможно достижение конца файла.
Пример использования readLine()
:
fun main(args: Array<String>) { println("Введите время в формате ЧЧ:ММ:СС") val line = readLine() if (line != null) { val seconds = timeStrToSeconds(line) if (seconds == -1) { println("Введённая строка $line не соответствует формату ЧЧ:ММ:СС") } else { println("Прошло секунд с начала суток: $seconds") } } else { println("Достигнут <конец файла> в процессе чтения строки. Программа прервана") } }
Здесь используется уже написанная нами функция timeStrToSeconds
, которой передаётся на вход прочитанная строка line
.
Упражнения
Откройте файл srс/lesson6/task1/Parse.kt
в проекте KotlinAsFirst
.
Выберите любую из задач в нём. Придумайте её решение и запишите его в теле соответствующей функции. Применяйте функцию split
для разбора строк. Для их форматирования применяйте строковые шаблоны или, если их недостаточно — функцию String.format()
.
Откройте файл test/lesson6/task1/Tests.kt
, найдите в нём тестовую функцию — её название должно совпадать с названием написанной вами функции. Запустите тестирование, в случае обнаружения ошибок исправьте их и добейтесь прохождения теста. Подумайте, все ли необходимые проверки включены в состав тестовой функции, добавьте в неё недостающие проверки.
Решите ещё хотя бы одну задачу из урока 6 на ваш выбор. Убедитесь в том, что можете решать такие задачи уверенно и без посторонней помощи. По возможности решите одну из задач, помеченных как “Сложная”.
Попробуйте написать функцию main
, осуществляющую консольный ввод входных данных для вашей задачи (хорошо подходит в тех случаях, когда параметром функции является строка), с последующим выводом на консоль результатов, попробуйте поиграть с получившейся программой в консоли.
Переходите к следующему разделу.
Благодарю!