我想在Kotlin中创建一个扩展功能,该功能将字符串中每个单词的首字母转换为大写字母
the quick brown fox
到
The Quick Brown Fox
我尝试使用capitalize()
方法。尽管仅将String
的首字母大写。
答案 0 :(得分:8)
由于您知道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(" ")
答案 1 :(得分:3)
它可以比接受的答案更简单:
fun String.capitalizeWords(): String = split(" ").joinToString(" ") { it.capitalize() }
答案 2 :(得分:1)
为什么不使用扩展属性呢?
val String.capitalizeWords
get() = this.toLowerCase().split(" ").joinToString(" ") { it.capitalize() }
可以这样称呼:
val test = "THIS iS a TeST."
println(test.capitalizeWords)
将显示:
This Is A Test.
我个人认为属性应该用于不带参数的返回。
答案 3 :(得分:0)
另一种可以通过转换实现此目的的方法:
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())
}
}
答案 4 :(得分:0)
capitalise() 现已弃用,kotlin 建议改用 replaceFirstChar
library(shiny)
ui <- fluidPage(
titlePanel("Try to suppress reactivity"),
verticalLayout(
mainPanel(
textInput('inp1', 'inputbox1', value = 'initial value, change triggers inputbox2'),
textInput('inp2', 'inputbox2', value = 'initial value'),
actionButton('btn1', 'should only trigger change of inputbox1'),
actionButton('reset', 'should reset both boxes to initial state')
)
)
)
server <- function(input, output, session) {
observeEvent(input$inp1,
updateTextInput(session, inputId = 'inp2', value = 'triggered')
, ignoreInit = TRUE)
observeEvent(input$btn1, updateTextInput(session, inputId = 'inp1', value = 'triggered using btn1'), ignoreInit = TRUE)
observeEvent(input$reset,{
updateTextInput(session, inputId = 'inp1', value = 'initial value')
updateTextInput(session, inputId = 'inp2', value = 'initial value')
}, ignoreInit = TRUE)
}
shinyApp(ui = ui, server = server)