Как функция разделения Kotlin работает с несколькими параметрами разделения

Я новичок в Котлине. Я хочу знать, как работает функция разделения. См. приведенный ниже пример.

Пример 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]

Видишь, П идет сейчас. Пожалуйста, объясните логику?

В чем разница между методом "==" и equals()
В чем разница между методом "==" и equals()
Это один из наиболее часто задаваемых вопросов новичкам на собеседовании. Давайте обсудим его на примере.
Замена символа по определенному индексу в JavaScript
Замена символа по определенному индексу в JavaScript
В JavaScript существует несколько способов заменить символ в строке по определенному индексу.
3
0
1 915
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Нет, ваша проблема в том, что 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]

Привет @gromyk, спасибо за ответ. Пожалуйста, посмотрите на второй пример. «цикл с использованием просто проходит через вашу строку и удаляет символы, которые равны разделителю в текущей итерации», как вы упомянули, я объясню второй пример. При замене первым разделителем «SEP» вывод должен быть «Примеры Kotlin Tutorial Tutoriala Kart», затем при цикле с «ASEP» в выводе не было найдено строки «ASEP». Итак, окончательный вывод должен быть «Примеры Kotlin Tutorial Tutoriala Kart», верно? Я сомневаюсь, как мы получили вывод как «Kotlin Tutorial, Tutorial, Kart, Examples»? Отсутствующий Tutoriala

Saranya Subramanian 23.04.2019 10:56

Из официальной документации: Чтобы избежать неоднозначных результатов, когда строки в разделителях имеют общие символы, этот метод переходит от начала к концу этой строки и сопоставляет в каждой позиции первый элемент в разделителях, равный разделителю в этом экземпляре в этой позиции.kotlinlang.org/api/latest/jvm/stdlib/kotlin.text/split.html

gromyk 23.04.2019 16:29

Другие вопросы по теме