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

时间:2018-08-27 15:51:01

标签: string function kotlin extension-function

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

the quick brown fox

The Quick Brown Fox

我尝试使用capitalize()方法。尽管仅将String的首字母大写。

5 个答案:

答案 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)