具有(字符串)奇怪行为的科特林

Kotlin with(String) strange behavior

我有一个简单的代码块,应该像“5555;John Snow”这样解析字符串

//Example of code without string population

val str = StringBuilder() 

with(str.toString().trim()) {
    card.id = substring(0, indexOf(";"))
    card.name = substring(indexOf(";" + 1, length))
}

但是当它尝试取名字时,抛出错误

java.lang.StringIndexOutOfBoundsException: length=SOME_LENGHT; index=-1

调试检查,字符串正确。它甚至有时在调试器中工作

我的错。

不正确

card.name = substring(indexOf(";" + 1, length))

正确

card.name = substring(indexOf(";") + 1, length)

不用担心索引:

with(str.toString().trim()) {
    card.id = substringBefore(";")
    card.name = substringAfter(";")
}