Я новичок в Котлине. Я хочу знать, как работает функция разделения. См. приведенный ниже пример.
Пример 1:
var str = "Kotlin TutorialsEPTutorialaSEpKartSEpExamples"
var delimiter1 = "SEP"
var delimiter2 = "ASEP"
var delimiter3 = "ASEPP"
val parts = str.split(delimiter1, ignoreCase = true)
print(parts)
Вывод (работает - все понятно, на основе строки "SEP" будет разделен):
[Kotlin Tutorial, Tutoriala, Kart, Examples]
Пример 2:
var str = "Kotlin TutorialsEPTutorialaSEpKartSEpExamples"
var delimiter1 = "SEP"
var delimiter2 = "ASEP"
var delimiter3 = "ASEPP"
val parts = str.split(delimiter1,delimiter2,ignoreCase = true)
print(parts)
Вывод (Работает - все понятно, на основе "SEP" и "ASEP" строка будет разделена, но я не знаю, как это работает. После разделения с помощью "SEP" приходит только TutorialA ll. Но как разделяется aSEP? ):
[Kotlin Tutorial, Tutorial, Kart, Examples]
Пример 3:
var str = "Kotlin TutorialsEPTutorialaSEpKartSEpASEPPExamples"
var delimiter1 = "SEP"
var delimiter2 = "ASEP"
var delimiter3 = "ASEPP"
val parts = str.split(delimiter1,delimiter2,delimiter3,ignoreCase = true)
Вывод: Судя по второму примеру, АСЭПП нужно разделить, верно?
[Kotlin Tutorial, Tutorial, Kart, , PExamples]
Видишь, П идет сейчас. Пожалуйста, объясните логику?


Нет, ваша проблема в том, что CharSequence.split(...) «берет» все ваши разделители, а цикл с помощью цикла просто проходит через вашу строку и удаляет символы, которые равны разделителю в текущей итерации (разделитель vararg). Если бы вы написали delimeter3 перед delimeter2, вы бы получили правильный (по вашему мнению) результат
val str = "Kotlin TutorialsEPTutorialaSEpKartSEpASEPPExamples"
val delimiter1 = "SEP"
val delimiter2 = "ASEP"
val delimiter3 = "ASEPP"
val parts = str.split(delimiter1, delimiter3, delimiter2, ignoreCase = true)
println(parts)
Выход
[Kotlin Tutorial, Tutorial, Kart, , Examples]
Из официальной документации: Чтобы избежать неоднозначных результатов, когда строки в разделителях имеют общие символы, этот метод переходит от начала к концу этой строки и сопоставляет в каждой позиции первый элемент в разделителях, равный разделителю в этом экземпляре в этой позиции.kotlinlang.org/api/latest/jvm/stdlib/kotlin.text/split.html
Привет @gromyk, спасибо за ответ. Пожалуйста, посмотрите на второй пример. «цикл с использованием просто проходит через вашу строку и удаляет символы, которые равны разделителю в текущей итерации», как вы упомянули, я объясню второй пример. При замене первым разделителем «SEP» вывод должен быть «Примеры Kotlin Tutorial Tutoriala Kart», затем при цикле с «ASEP» в выводе не было найдено строки «ASEP». Итак, окончательный вывод должен быть «Примеры Kotlin Tutorial Tutoriala Kart», верно? Я сомневаюсь, как мы получили вывод как «Kotlin Tutorial, Tutorial, Kart, Examples»? Отсутствующий Tutoriala