как функция split Kotlin работает с несколькими параметрами split - PullRequest
0 голосов
/ 21 апреля 2019

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

Пример 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 будет. Но как 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)

Вывод: Основываясь на втором примере, ASEPP следует разделить, верно?

[Kotlin Tutorial, Tutorial, Kart, , PExamples]

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

1 Ответ

2 голосов
/ 21 апреля 2019

Нет, ваша проблема в том, что 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]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...