Класс String в Kotlin представляет собой массив типов char. Строки являются неизменяемыми, что означает, что длина и элементы не могут быть изменены после их создания.
val ch = charArrayOf('h', 'e', 'l', 'l', 'o')
val st = String(ch)
В отличие от Java, Kotlin не требует нового ключевого слова для создания экземпляра объекта класса String. Строка может быть просто объявлена в двойной кавычке(» «), известной как экранированная строка, или в тройной кавычке(«»» «»»), известной как необработанная строка.
val str1 = "Hello, javaTpoint" val str2 = """Welcome To JavaTpoint"""
Свойства строки в Kotlin
| Свойство | Описание |
|---|---|
| длина: Int | Возвращает длину последовательности строк. |
| индексы: IntRange | Возвращает диапазоны допустимых индексов символов из текущей последовательности символов. |
| lastIndex: Int | Он возвращает индекс последнего символа из последовательности символов. |
Строковые функции
| Функция | Описание |
|---|---|
| compareTo(other: String): Int | Она сравнивает текущий объект с указанным объектом для порядка. Возвращает 0, если текущий объект равен указанному другому объекту. |
| get(index: Int): Char | Возвращает символ с заданным индексом из текущей последовательности символов. |
| plus(other: Any?): String | Возвращает объединенную строку со строковым представлением данной другой строки. |
| subSequence(startIndex: Int, endIndex: Int): CharSequence | Новая последовательность символов из текущей последовательности символов, начиная с startIndex до endIndex. |
| CharSequence.contains(other: CharSequence, ignoreCase: Boolean = false): Boolean | Возвратит true, если последовательность символов содержит другую указанную последовательность. |
| CharSequence.count(): Int | Она возвращает длину последовательности символов. |
| String.drop(n: Int): String | Она возвращает строку после удаления первых n символов. |
| String.dropLast(n: Int): String | Возвращает строку после удаления последних n символов. |
| String.dropWhile (predicate: (Char) -> Boolean ): String |
Последовательность символов, которая содержит все символы, кроме первых символов, которые удовлетворяют заданному предикату. |
| CharSequence.elementAt(index: Int): Char | Возвращает символ по заданному индексу или генерирует исключение IndexOutOfBoundsException, если индекс не существует в последовательности символов. |
| CharSequence.indexOf(char: Char, startIndex: Int = 0, ignoreCase: Boolean = false ): Int |
Она возвращает индекс первого вхождения данного символа, начиная с заданного значения индекса. |
| CharSequence.indexOfFirst( predicate: (Char) -> Boolean ): Int |
Возвращает индекс первого символа, соответствующего заданному предикату, или -1, если последовательность символов не содержит такого символа. |
| CharSequence.indexOfLast( predicate: (Char) -> Boolean ): Int |
Возвращает индекс последнего символа, соответствующего заданному предикату, или -1, если последовательность символов не содержит такого символа. |
| CharSequence.getOrElse(index: Int, defaultValue:(Int) ->Char): Char | Она возвращает символ по указанному индексу или результат вызова функции defaultValue, если индекс выходит за пределы текущей последовательности символов. |
| CharSequence.getOrNull(index: Int): Char? | Возвращает символ по заданному индексу или возвращает ноль, если индекс выходит за пределы последовательности символов. |
Элементы строки и шаблоны
Строковые элементы
Символы, присутствующие в строке, называются элементами строки. Доступ к элементу строки осуществляется с помощью операции индексации string[index]. Значение индекса строки начинается с 0 и заканчивается на единицу меньше размера строки string[string.length-1]. Индекс 0 представляет первый элемент, индекс 1 представляет второй элемент и так далее.
val str ="Hello, javatpoint" println(str[0]) //prints H
Пример доступа к строковому элементу:
fun main(args: Array) {
val str = "Hello, javatpoint!"
println(str[0])
println(str[1])
println(str[str.length-1])
}
Выход:
H e !
Строковые шаблоны
Строковое шаблонное выражение — это фрагмент кода, который оценивается, и его результат возвращается в виде строки. Оба типа строк (экранированные и необработанные) содержат шаблонные выражения. Строковые шаблоны начинаются со знака доллара $, который состоит либо из имени переменной, либо из произвольного выражения в фигурных скобках.
Шаблон строки как имя переменной:
val i =10
print("i = $i") //i=10
fun main(args: Array) {
val i =10
print("i = $i")//i=10
}
Выход:
i=10
Строковый шаблон также используется в произвольном выражении в фигурных скобках для вычисления строкового выражения. Это делается с помощью знака доллара $.
Строковый шаблон как произвольное выражение в фигурных скобках:
fun main(args: Array) {
val str = "abc"
println("$str is a string which length is ${str.length}")
}
abc is a string which length is 3
Шаблон в необработанной строке:
fun main(args: Array) {
val a = 10
val b = 5
val myString = """value $a
|is greater than value $b
""".trimMargin()
println("${myString.trimMargin()}")
}
Выход:
value 10 is greater than value 5
Строковые литералы Kotlin
В Kotlin есть два типа строковых литералов:
- Экранированная строка
- Необработанная строка
Экранированная строка
Escape-строка объявляется в двойных кавычках(«») и может содержать escape-символы, такие как ‘\n’, ‘\t’, ‘\b’ , ‘\r’, ‘\$’ и т. д.
val text1 ="Hello, JavaTpoint" //or val text2 ="Hello, JavaTpoint\n" //or val text3 ="Hello, \nJavaTpoint"
Необработанная строка
Строка объявляется в тройных кавычках(«»» «»»). Это позволяет объявлять строку в новых строках и содержать несколько строк. Строка строки не может содержать управляющих символов.
val text1 ="""
Welcome
To
JavaTpoint
"""
При использовании необработанной строки с новой строкой она генерирует | как префикс поля. Например:
fun main(args: Array) {
val text = """Kotlin is official language
|announce by Google for
|android application development
"""
println(text)
}
Выход:
Kotlin is official language
|announce by Google for
|android application development
Строковая функция trimMargin()
Начальный пробел можно удалить с помощью функции trimMargin(). По умолчанию функция trimMargin() использует | как префикс поля.
fun main(args: Array) {
val text = """Kotlin is official language
|announce by Google for
|android application development
""".trimMargin()
println(text)
}
Выход:
Kotlin is official language announce by Google for android application development
Однако его можно изменить, передав новую строку внутри функции trimMargin().
fun main(args: Array) {
val text = """Kotlin is official language
#announce by Google for
#android application development
""".trimMargin("#")
println(text)
}
Выход:
Kotlin is official language announce by Google for android application development
Строковое равенство
В Kotlin сравнения строк на равенство выполняются на основе структурного равенства(==) и ссылочного равенства(===).
При структурном равенстве два объекта имеют отдельные экземпляры в памяти, но содержат одно и то же значение.
Ссылочное равенство указывает, что две разные ссылки указывают на один и тот же экземпляр в памяти.
Структурное равенство(==)
Чтобы проверить два объекта, содержащие одно и то же значение, мы используем оператор == или оператор != для отрицания. Это эквивалентно equals() в java.
fun main(args: Array) {
val str1 = "Hello, World!"
val str2 = "Hello, World!"
println(str1==str2) //true
println(str1!=str2) //false
}
Выход:
true false
Ссылочное равенство(===)
Чтобы проверить, что две разные ссылки указывают на один и тот же экземпляр, мы используем оператор ===. Оператор !== используется для отрицания. a === b указывает true тогда и только тогда, когда a и b указывают на один и тот же объект.
Давайте посмотрим на пример ссылочного равенства, чтобы проверить, что разные ссылки содержат один и тот же экземпляр или нет. Для создания строки мы используем вспомогательный метод buildString, а не кавычки.
fun main(args: Array) {
val str1 = buildString { "string value" }
val str2 = buildString { "string value" }
println(str1===str2)
println(str1!==str2)
}
Выход:
false true
