Kotlin: есть ли класс для подстроки?
Есть рекурсивная функция принимающая на вход строку. Она разбивает эту строку на части и для каждой части вызывает саму себя. Эта функция никак не меняет входную строку, только читает её. Функция реализована на Kotlin. Сейчас, для создания подстроки вызывается функция substring:
myFunc(str.substring(begin, length))
Есть сомнения в эффективности данной реализации. На каждый вызов создаётся новая строка, хотя достаточно указать начало и длину подстроки в первоначальной строке. Есть ли в Kotlin класс для подстрок? Например в стандартной библиотеке C++ есть класс std::string_view, а в Qt есть класс QStringRef. Есть ли что-то подобное в Kotlin?
Или класс String уже оптимизирован и функция substring не аллоцирует новую память, а новая строка использует тот же буфер в памяти, что и первоначальная?
Ответы (1 шт):
В старых версиях java результатом substring действительно была исходная строка с указанием необходимого смещения.
Начиная где-то с 7 версии данное поведение было изменено и результатом substring теперь является новая строка.
В kotlin, как и в java, функция substring осуществляет копирование исходного массива байт с учётом необходимого смещения, т.е. создаётся новая строка, что можно наблюдать в исходниках, провалившись в метод substring.