使用扩展函数将字符串中的每个单词大写
Capitalise every word in String with extension function
我想在 Kotlin 中做一个扩展函数,将字符串中每个单词的首字母转换为大写
the quick brown fox
到
The Quick Brown Fox
我尝试使用 capitalize()
方法。那只是把 String
的第一个字母大写了。
既然您知道 capitalize()
,您所需要做的就是用 space 作为分隔符拆分字符串以提取每个单词并将 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() }
可以用比接受的答案提供的更简单的方法来完成,检查这个:
fun String.capitalizeWords(): String = split(" ").joinToString(" ") { it.capitalize() }
为什么不使用扩展名 属性?
val String.capitalizeWords
get() = this.toLowerCase().split(" ").joinToString(" ") { it.capitalize() }
可以这样称呼:
val test = "THIS iS a TeST."
println(test.capitalizeWords)
将显示:
This Is A Test.
我个人认为属性应该用于 returns 且不带参数。
另一种使用转换的方法:
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())
}
}
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() }
}
}
我想在 Kotlin 中做一个扩展函数,将字符串中每个单词的首字母转换为大写
the quick brown fox
到
The Quick Brown Fox
我尝试使用 capitalize()
方法。那只是把 String
的第一个字母大写了。
既然您知道 capitalize()
,您所需要做的就是用 space 作为分隔符拆分字符串以提取每个单词并将 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() }
可以用比接受的答案提供的更简单的方法来完成,检查这个:
fun String.capitalizeWords(): String = split(" ").joinToString(" ") { it.capitalize() }
为什么不使用扩展名 属性?
val String.capitalizeWords
get() = this.toLowerCase().split(" ").joinToString(" ") { it.capitalize() }
可以这样称呼:
val test = "THIS iS a TeST."
println(test.capitalizeWords)
将显示:
This Is A Test.
我个人认为属性应该用于 returns 且不带参数。
另一种使用转换的方法:
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())
}
}
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() }
}
}