kotlin 使用扩展函数将字符串中的每个单词大写

z9zf31ra  于 2023-01-09  发布在  Kotlin
关注(0)|答案(8)|浏览(223)

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

the quick brown fox

The Quick Brown Fox

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

egdjgwm8

egdjgwm81#

既然你知道capitalize(),你所需要做的就是用空格作为分隔符来分割字符串,以提取每个单词,并对每个单词应用capitalize(),然后重新连接所有的单词。

fun String.capitalizeWords(): String = split(" ").map { it.capitalize() }.joinToString(" ")

使用它:

val s = "the quick brown fox"
println(s.capitalizeWords())

将打印:

The Quick Brown Fox

注意:这个扩展不考虑单词中可能大写或可能不大写的其他字符,但这确实:

fun String.capitalizeWords(): String = split(" ").map { it.toLowerCase().capitalize() }.joinToString(" ")

或更短:

@SuppressLint("DefaultLocale")
fun String.capitalizeWords(): String =
    split(" ").joinToString(" ") { it.toLowerCase().capitalize() }
j5fpnvbx

j5fpnvbx2#

它可以用比已接受的答案更简单的方式完成,请检查:

fun String.capitalizeWords(): String = split(" ").joinToString(" ") { it.capitalize() }
rbpvctlc

rbpvctlc3#

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() }
    }
}
t5fffqht

t5fffqht4#

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

val String.capitalizeWords
    get() = this.toLowerCase().split(" ").joinToString(" ") { it.capitalize() }

它可以被称为:

val test = "THIS iS a TeST."
println(test.capitalizeWords)

它将显示:

This Is A Test.

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

bz4sfanl

bz4sfanl5#

String#capitalize()已过时。请使用以下命令:

query.replaceFirstChar { if (it.isLowerCase()) it.titlecase(Locale.getDefault()) else it.toString() }
3df52oht

3df52oht6#

另一个没有过时方法的解决方案:

fun String.capitalizeWords(): String =
    split(" ").joinToString(" ") { w -> w.replaceFirstChar { c ->  c.uppercaseChar() } }
zsbz8rwp

zsbz8rwp7#

另一种可以使用变换实现此操作的方法是:

fun String.capitalizeWords() = split(' ').joinToString(" ", transform = String::capitalize)

还有一个测试:

class StringExtensionTest {
  @Test
  fun `test capitalize a sentance`() = run {
    Assert.assertEquals("Abba Sill Med Extra", "abba sill med extra".capitalizeWords())
  }
}
z31licg0

z31licg08#

最新的优雅解决方案,没有任何过时的构造

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

相关问题