Stephan Schroeder
10/09/2019, 2:48 PMlastEndTokenIndex
is -1
😐 If I use lastIndexOf
without fromIndex
than the result is the expected 40. But 40 is bigger than 0, so this fromIndex shouldn’t interfere with the result, should it??
fun main() {
val sb = StringBuilder("<products><product>2</product><product>4</product></products>")
val endToken = "</product>"
val fromIndex = 0
val lastEndTokenIndex = sb.lastIndexOf(endToken, fromIndex)
println("lastEndTokenIndex: $lastEndTokenIndex")
}
Kotlin Playground: https://pl.kotl.in/SlHzdIq1jkarelpeeters
10/09/2019, 2:50 PMfromIndex
.Stephan Schroeder
10/09/2019, 2:55 PMkarelpeeters
10/09/2019, 2:59 PMStephan Schroeder
10/09/2019, 3:00 PMkarelpeeters
10/09/2019, 3:00 PMlastIndexOf
and check if the result is indeed larger than fromIndex
.Stephan Schroeder
10/09/2019, 3:02 PMRuckus
10/09/2019, 3:14 PMStephan Schroeder
10/09/2019, 3:24 PMfun StringBuilder.lastIndexOfAfter(str: String, startIndexOrAfter: Int): Int {
tailrec fun lastIndexOfAfter(lastIndexFound: Int, sb: StringBuilder, str: String, fromIndex: Int): Int {
val foundIndex = sb.indexOf(str, fromIndex)
if(foundIndex==-1) {
return lastIndexFound
}else{
return lastIndexOfAfter(foundIndex, sb, str, foundIndex+1)
}
}
return lastIndexOfAfter(-1, this, str, startIndexOrAfter)
}
karelpeeters
10/09/2019, 3:24 PMStephan Schroeder
10/09/2019, 3:25 PMtailrec
in it, so I’m feeling pretty good right now 😎fun StringBuilder.lastIndexOfAfter2(str: String, startIndexOrAfter: Int): Int {
for(index in (this.length-str.length downTo startIndexOrAfter)) {
if(this.startsWith(str, index)) {
return index
}
}
return -1
}