【问题标题】:Capitalise every word in String with extension function使用扩展函数将字符串中的每个单词大写
【发布时间】:2018-08-27 15:51:01
【问题描述】:

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

the quick brown fox

The Quick Brown Fox

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

【问题讨论】:

  • 那么,你卡在哪里了?
  • 我正在使用 .capitalized() 方法,但通过使用这种方法,它只会影响“The”,但我试图在所有句子中都这样做

标签: string function kotlin extension-function


【解决方案1】:

既然您知道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() }

【讨论】:

  • @SamuelKodytek 我同意删除it,尽管我喜欢它在那里,因为我喜欢this 在那里,尽管它也没用。
  • 干杯!我理解你的意思,但我认为,如果你已经在使用箭头符号,你应该指定变量的名称,例如:word -> //More code
  • @SamuelKodytek 这会使其更具可读性,但正如我所说,我喜欢 itthis
  • 我明白了:)
  • map 可以通过与joinToString 合并来简化。喜欢,split(" ").joinToString(" ") { it.capitalize() }
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

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

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

    可以这样称呼:

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

    将显示的内容:

    This Is A Test.
    

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

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        【解决方案5】:

        您可以通过转换来做到这一点的另一种方式:

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

        【讨论】:

          猜你喜欢
          • 2021-09-05
          • 1970-01-01
          • 2010-10-16
          • 1970-01-01
          • 2018-10-24
          • 2011-05-15
          • 1970-01-01
          • 2014-06-19
          • 1970-01-01
          相关资源
          最近更新 更多