Класс String в Kotlin — подробно про строки

Класс 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 

Оцените статью