kotlin中获取选中字符串的长度

Obtain the length of the selected string in kotlin

我想获取字符串中的索引字符或单词

例如

tv.text=" hey how are you, are you okay"

val res=tv.text.indexOf('h')

(有什么办法可以用字符串代替字符吗?

输出分辨率=0

return 的索引只有第一个带有 h 的字符,但在我的电视文本中我有更多的 h 字符 我们可以 return 所有 h 字符索引

以下应该有效(如果在上一次迭代中找到一个索引,则尝试查找索引,然后从先前找到的字符实例加 1 开始下一次迭代,这样就不会再次找到相同的索引,并且再次):

fun main() {
    val word = " hey how are you, are you okay"
    val character = 'h'
    var index: Int = word.indexOf(character)
    while (index >= 0) {
        println(index)
        index = word.indexOf(character, index + 1)
    }
}

如果您想存储索引供以后使用,您还可以执行以下操作:

fun main() {
    val word = " hey how are you, are you okay"
    val character = 'h'
    val indexes = mutableListOf<Int>()
    var index: Int = word.indexOf(character)
    while (index >= 0) {
        index = word.indexOf(character, index + 1)
        indexes.add(index)
    }
    println(indexes)
}

您可以使用 filter 函数来获取具有所需字符的所有字符串索引。

val text = " hey how are you, are you okay"
val charToSearch = 'h'
val occurrences = text.indices.filter { text[it] == charToSearch }
println(occurences)

Try it yourself

而且,如果您想搜索字符串而不是单个字符,您可以这样做:

text.indices.filter { text.startsWith(stringToSearch, it) }

如果您只想让所有索引都匹配一个字符,您可以这样做:

text.indices.filter { text[it] == 'h' }

查找字符串匹配比较棘手,您可以使用 Kotlin 的 regionMatches 函数来检查从 index 开始的字符串部分是否与您要查找的匹配:

val findMe = "you"
text.indices.filter { i ->
    text.regionMatches(i, findMe, 0, findMe.length)
}

您也可以使用正则表达式,只要您小心验证搜索模式即可:

Regex(findMe).findAll(text)
    .map { it.range.first() } // getting the first index of each matching range
    .toList()