Kotlin: Кавычки

"Hello"
"Goodbye"
"G"
" "
""

Какие из этих пяти вариантов — строки? С первыми двумя все понятно, это точно строки, мы уже работали с подобными конструкциями. А что насчет остальных? Любой одиночный символ в кавычках — это строка. Пустая строка "" — это тоже строка. То есть строкой мы считаем всё, что находится внутри кавычек, даже если это пробел, один символ или вообще отсутствие символов.

Представьте, что вы хотите напечатать строчку dragon's mother. Апостроф перед буквой s — это такой же символ, как одинарная кавычка. Попробуем:

Такой вариант программы отработает корректно:

println("Dragon's mother")

А что, если мы хотим создать такую строку:

Dragon's mother said "No"

В ней есть и одинарные и двойные кавычки. Как быть в этой ситуации? Если просто попытаться вывести такую строку, то мы получим ошибку:

// Завершится с синтаксической ошибкой
println("Dragon's mother said "No"")

С точки зрения Kotlin, здесь странная конструкция состоящая из строк "Dragon's mother said " и "" и No между ними без пробелов. Причем последнее не рассматривается как строка, оно не в кавычках. Значит прямым способом эту строчку не вывести.

Для вывода таких строк используют символ экранирования: \. Если поставить \ перед кавычкой, это будет означать, что кавычку нужно рассматривать не как начало или конец строки, а как часть строки.

println("Dragon's mother said \"No\"")

Задание

Напишите программу, которая выведет на экран:

"Khal Drogo's favorite word is "athjahakar""

Программа должна вывести на экран эту фразу в точности. Обратите внимание на кавычки в начале и в конце фразы.

Как с вами связаться? 😶

Команда проекта находится в телеграм-сообществе по ссылке https://ttttt.me/HexletLearningBot. Там можно задать любой вопрос и повлиять на проект

Упражнение не проходит проверку — что делать? 😶

Если вы зашли в тупик, то самое время поговорить с нашим асситентом Тота во вкладке "Обсуждение". Как правильно задать вопрос:

В моей среде код работает, а здесь нет 🤨

Тесты устроены таким образом, что они проверяют решение разными способами и на разных данных. Часто решение работает с одними входными данными, но не работает с другими. Чтобы разобраться с этим моментом, изучите вкладку «Тесты» и внимательно посмотрите на вывод ошибок, в котором есть подсказки.

Мой код отличается от решения учителя 🤔

Это нормально 🙆, в программировании одну задачу можно выполнить множеством способов. Если ваш код прошел проверку, то он соответствует условиям задачи. В редких случаях бывает, что решение подогнано под тесты, но это видно сразу.

Прочитал урок — ничего не понятно 🙄

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

Нашли ошибку? Есть что добавить? Пулреквесты приветствуются

Привет! Я Тота и моя задача помочь в обучении. Чтобы активировать меня, нужно зарегистрироваться или залогиниться, если у вас уже есть аккаунт

Loading...

Ваше упражнение проверяется по этим тестам

1import static hexlet.io.TestUtils.getStandartOutput;
2import static org.assertj.core.api.Assertions.assertThat;
3
4class Test {
5    public static void main(final String[] args) {
6        final String expected = "\"Khal Drogo's favorite word is \"athjahakar\"\"";
7
8        MainKt.main();
9
10        final String actual = getStandartOutput(() -> MainKt.main()).trim();
11
12        assertThat(actual).isEqualTo(expected);
13    }
14}
15

Решение учителя откроется через:

20:00
waiting_clock