Числа лежат в основе программирования, но вы будете работать не только с ними. Текстовые данные также является очень распространенным типом. Это могут быть имена людей, адреса или даже книги. Все это примеры текста, который может потребоваться обработать приложению.
Содержание статьи
- Как компьютер воспринимает строки
- Unicode
- Char и String — Символы и строки в Kotlin
- Конкатенация строк в Kotlin
- Шаблонные строки в Kotlin
- Многострочный текст в Kotlin
- Задания для проверки
Большинство языков программирования хранит текст в виде типа данных, который называется строкой, или string
. Данный урок познакомит вас со строками, сначала давая базовую информацию о концепции строк, а затем показывая, как их использовать в Kotlin.
Как компьютер воспринимает строки
Компьютеры воспринимают строки как набор отдельных символов. В прошлых уроках вы узнали, что числа представляют собой язык процессоров, и любые языки программирования можно свести к необработанным числам. Строки ничем не отличаются!
Это может показаться очень странным. Как символы могут быть числами? Компьютер умеет переводить символ на собственный язык. Он это делает, присваивая каждому символу другой номер. Это формирует двустороннее отображение символа в число, которое называется набором символов.
При нажатии клавиши символа на клавиатуре вы передаете компьютеру номер символа. Текстовый редактор преобразует число в изображение символа и показывает вам это изображение.
Unicode
Изолированно, компьютер может выбирать любое сопоставление набора символов, которое ему нравится. Если нужно, чтобы буква а была равна числу 10, пусть так и будет. Но когда компьютеры начинают общаться друг с другом, им необходимо использовать общий набор символов. Ведь при задействовании разных наборов символов возникает путаница, так как компьютеры рассматривают разные образцы символов.
На протяжении многих лет существовало несколько стандартов, но самым современным стандартом является Unicode. Он определяет отображение набора символов, которое сегодня используют почти все компьютеры.
На заметку: Подробнее об Unicode можете прочитать на официальном сайте.
В качестве примера рассмотрим слово cafe. Стандарт Unicode указывает, что буквы данного слова нужно представить следующим образом:
Число, связанное с каждым символом, называется кодовой точкой. В приведенном выше примере c использует кодовую точку 99, a использует кодовую точку 97 и так далее.
Конечно, Unicode предназначен не только для простых латинских символов, используемых в английском языке вроде c, a, f и e. Он также позволяет отображать символы других языков. Слово cafe происходит от французского, в котором оно пишется как café. Unicode отображает эти символы следующим образом:
Далее дан пример с использование китайских символов (Переводчик Google перевел символы как “Computer Programming”):
Вы наверняка не раз использовали смайлики, или эмодзи. По сути они являются символами, преобразованными с помощью Unicode. К примеру:
Это только два символа. Кодовыми точками данных символов являются довольно крупные числа, но каждое из них представляет собой только одну кодовую точку. Компьютер воспринимает такие смайлики точно так же, как и любые другие символы.
На заметку: Слово «эмодзи» происходит от японского, где «э» значит «картинка», а «модзи» значит «символ».
Char и String — Символы и строки в Kotlin
Kotlin, как и любой хороший язык программирования, может работать напрямую с символами и строками. Для этого используются типы Char
и String
. Далее мы подробно рассмотрим данные типы данных и то, как с ними работать.
Тип данных Char
может хранить один символ, который должен быть обрамлен в одинарные кавычки. К примеру:
1 | val characterA: Char = 'a' |
Этот тип данных предназначен для хранения только одного символа. С другой стороны, тип String
хранит много символов, которые должны помещаться внутри двойных кавычек. К примеру:
1 | val stringDog: String = "Dog" |
Все просто! Правая часть данного выражения представляет собой строковый литерал. Это синтаксис Kotlin для представления строки.
Здесь также применяется вывод типа. Если вы удалите тип в приведенном выше объявлении переменной, Kotlin сам поймет, что stringDog
является константой типа String
:
1 | val stringDog = "Dog" // Вывод типа String |
Конкатенация строк в Kotlin
После создания строк вы можете совершить над ними различные действия. Одним из самых популярных способов манипуляции со строкой является ее объединение с другой строкой.
В Kotlin это делается довольно просто: с помощью оператора сложения +
. Строки складываются точно так же, как числа:
1 2 3 | var message = "Привет!" + " Меня зовут " val name = "Иван" message += name // Вывод: "Привет! Меня зовут Иван" |
Вам нужно объявить переменную message
, а не константу, потому что ее нужно будет модифицировать. Можно складывать строковые литералы вместе, как в первой строке, и можно складывать строковые переменные или константы вместе, как в последней строке.
Также возможно добавлять символы прямо в строку. Это похоже на работу с числами, если одна переменная типа Int
, а другое — Double
.
Для добавления символа в строку сделайте следующее:
1 2 | val exclamationMark: Char = '!' message += exclamationMark // Вывод: "Привет! Меня зовут Иван!" |
Нет нужды конвертировать Character
в String
перед добавлением в message
, Kotlin сделает это сам.
Шаблонные строки в Kotlin
В Kotlin можно создавать строки, используя шаблоны. Они используют специальный синтаксис, который позволяет создать строку, которая легко читается:
1 | message = "Привет! Меня зовут $name!" // Вывод: "Привет! Меня зовут Иван!" |
Это читается удобнее, чем пример из предыдущего раздела. Это расширение синтаксиса строкового литерала, с помощью которого заменяются определенные части строки другими значениями. Просто добавьте перед значением, которое требуется вставить, символ $
.
Этот синтаксис используется и для создания строк из других типов данных, к примеру, чисел:
1 2 | val oneThird = 1.0 / 3.0 val oneThirdLongString = "Одна треть равна $oneThird в виде десятичной дроби." |
В шаблоне используется Double
. В конце, константа oneThirdLongString
будет содержать следующее:
1 | Одна треть равна 0.3333333333333333 в виде десятичной дроби. |
Для представления одной трети десятичной дроби потребовалось бы бесконечное количество символов, потому что это периодическая десятичная дробь. Использование строковых шаблонов с Double
не позволяет управлять точностью.
Это неприятные последствие использования строковых шаблонов — они просты, но не дают возможности настраивать вывод.
Внутри строкового шаблона также можно поместить выражения, поставив за символом $
пару фигурных скобок, которые содержат выражение:
1 | val oneThirdLongString = "Одна треть равна ${1.0 / 3.0} в виде десятичной дроби." |
Результат будет прежним.
Многострочный текст в Kotlin
В Kotlin есть удобный способ записи многострочного текста. Он может быть полезен при необходимости размещения очень длинной строки.
Это делается следующим образом:
1 2 3 4 5 6 7 8 9 | val bigString = """ |Таким образом |вы можете получить строку, |содержащую |несколько |строк. """.trimMargin() println(bigString) |
Три двойные кавычки указывают на многострочный текст. Первая и последняя строки не становятся частью содержимого переменной или константы. Это удобно, так как вам не нужно размещать три двойные кавычки в одной строке с содержимым. Что-то похожее мы делали при изучении многострочных комментариев.
Вывод кода будет следующим:
1 2 3 4 5 | Таким образом вы можете получить строку, содержащую несколько строк. |
Обратите внимание на вертикальную черту |
в начале строк и на вызов функции trimMargin()
. Такая запись предотвращает появление в строке начальных пробелов, позволяя форматировать код с красивыми отступами, не влияя на вывод.
Задания для проверки
- Создайте строковую константу
firstName
, значением которой будет ваше имя. Также создайте строковую константуlastName
, значением которой будет ваша фамилия; - Создайте строковую константу
fullName
, сложив константыfirstName
иlastName
вместе и разделив их пробелом; - Используя строковые шаблоны, создайте строковую константу
myDetails
, которая использует константуfullName
для создания представляющей вас строки. К примеру,"Привет, меня зовут Иван Иванов."