Android Studio Kotlin:如何正确检查字符串中的空格

Android Studio Kotlin: How to properly check spaces in a string

我努力检查的主要内容是字符之间的空格。我想换一个 “”变成“_”但只有当它后面还有另一个字母时......我无法做到。我目前的支票是:

for (c in userName) {
    if ("$c" == " ") { //How do I check in here if after c comes another word??
       userName = userName.replace("$c", "_")
     }
    }

像这样的事情怎么样:

    for (index in userName.indices) {
        val letter = userName[index]
        val nextLetter = userName.getOrNull(index + 1)
        // if nextLetter == null it means end of the userName
        if (nextLetter == null || nextLetter != ' ') {
            // Do the replacement
        }
    }

使用 Kotlin

中提供的 APIs 更容易

我留下了一些评论来阐明每个步骤。 通常,手动操作字符串会比提供的 APIs

更难

实际上,RegEx 的使用将是你最好的朋友,但我想保持这段代码的相关性,而不是用那种方式解决它。

此外,在 Kotlin 中,双引号 " 和单引号 ' 之间存在明显区别 双引号是字符串,单引号是字符。 2.

下还有一个不一样的API

我在字符串迭代器方法中使用单引号来保持它更简单和高效,而不是每次都必须创建新的字符串

val myUsername = "super dude 25"
val expectedUsername = "super_dude_25"

val lotsOfSpaces = "  super    dude   58    "
val expectedSpaces = "super_dude_58"

fun formatUsername(string: String): String {
    // Set var to detect duplicate chars
    var prevChar = ' '

    return string.trim() // Remove surrounding spaces to simplify
        .replace(' ', '_') // Spaces into underscores
        .filter { char -> // Remove duplicated underscores
            if (char == '_' && prevChar == '_') false
            else {
               prevChar = char
               true 
            }
        }
}

val updated = formatUsername(myUsername)
println(updated) // super_dude_25
assert(updated == expectedUsername)

val second = formatUsername(lotsOfSpaces)
println(second)
assert(second == expectedSpaces)