使用扩展功能将String中的每个单词大写

Jak*_*nes 1 string function kotlin extension-function

我想在Kotlin中创建扩展功能,该功能将字符串的每个单词的首字母转换为大写

the quick brown fox
Run Code Online (Sandbox Code Playgroud)

The Quick Brown Fox
Run Code Online (Sandbox Code Playgroud)

我尝试使用该capitalize()方法。那只是大写的第一个字母String

小智 27

既然您知道capitalize()所有您需要的就是用空格作为分隔符来分割字符串以提取每个单词并应用于capitalize()每个单词。然后重新加入所有单词。

fun String.capitalizeWords(): String = split(" ").map { it.capitalize() }.joinToString(" ")
Run Code Online (Sandbox Code Playgroud)

用它:

val s = "the quick brown fox"
println(s.capitalizeWords())
Run Code Online (Sandbox Code Playgroud)

将打印:

The Quick Brown Fox
Run Code Online (Sandbox Code Playgroud)

注意:此扩展名未考虑大写单词中的其他字符,但这可以:

fun String.capitalizeWords(): String = split(" ").map { it.toLowerCase().capitalize() }.joinToString(" ")
Run Code Online (Sandbox Code Playgroud)

  • 可以通过与joinToString合并来简化map。就像`split(“”).joinToString(“”){it.capitalize()}` (2认同)
  • 请注意,“String.capitalize()”现在*已弃用*,您应该使用“replaceFirstChar”代替 (2认同)

小智 10

Capitalise() 现已弃用,kotlin 建议使用 ReplaceFirstChar 代替

fun camelCase(string: String, delimiter: String = " ", separator: String = " "): String {
    return string.split(delimiter).joinToString(separator = separator) {
        it.lowercase().replaceFirstChar { char -> char.titlecase() }
    }
}
Run Code Online (Sandbox Code Playgroud)


Smu*_*aco 8

为什么不使用扩展属性呢?

val String.capitalizeWords
    get() = this.toLowerCase().split(" ").joinToString(" ") { it.capitalize() }
Run Code Online (Sandbox Code Playgroud)

可以这样称呼:

val test = "THIS iS a TeST."
println(test.capitalizeWords)
Run Code Online (Sandbox Code Playgroud)

它将显示:

This Is A Test.
Run Code Online (Sandbox Code Playgroud)

我个人认为属性应该用于不带参数的返回。


Rai*_*ker 6

比接受这样的答案更简单:

fun String.capitalizeWords(): String = split(" ").joinToString(" ") { it.capitalize() }
Run Code Online (Sandbox Code Playgroud)


i30*_*mb1 5

最新的优雅解决方案,没有任何已弃用的结构

fun String.toCamelCase(delimiter: String = " "): String {
    return split(delimiter).joinToString(delimiter) { word ->
        word.replaceFirstChar(Char::titlecaseChar)
    }
}
Run Code Online (Sandbox Code Playgroud)