【问题标题】:How to reverse the case of a string in Kotlin?如何在 Kotlin 中反转字符串的大小写?
【发布时间】:2018-07-08 12:08:00
【问题描述】:

反转字符串大小写的最有效方法是什么?

input = "Hello World"
output = "hELLO wORLD"

这里将大写字符转换为小写,反之亦然。

是否有任何默认库支持执行此操作?

【问题讨论】:

标签: kotlin


【解决方案1】:

在 Kotlin 中,我会提出这样的建议:

fun String.reverseCase(): String = map { if (it.isUpperCase()) it.toLowerCase() else it.toUpperCase() }.joinToString("")

将 String 中的每个 Char 转换为相反的字符,然后加入不带分隔符的 String。

可以如下使用:

val input = "Hello WorLD"
val expected = "hELLO wORld"
input.reverseCase() shouldBeEqualTo expected

【讨论】:

    【解决方案2】:

    字符串扩展函数来反转字符串的大小写:

    方式一:使用 CharArray

    fun String.reverseCaseOfString(): String {
        val inputCharArr = toCharArray() // Converting the input to char array
        var output = ""
        for (i in 0 until inputCharArr.size) {
            output += if (inputCharArr[i].isUpperCase()) { // Checking the character is in uppercase or not
                inputCharArr[i].toLowerCase() // Converting the char to lower case
            } else {
                inputCharArr[i].toUpperCase() // Converting the char to upper case
            }
        }
        return output
    }
    

    方式 2:使用 CharIterator

    private fun String.reverseCaseOfString(): String {
        val charIterator = iterator() // CharIterator of string
        var output = ""
        for (char in charIterator) {
            output += if (char.isUpperCase()) { // Checking the character is in uppercase or not
                char.toLowerCase() // Converting the char to lower case
            } else {
                char.toUpperCase() // Converting the char to upper case
            }
        }
        return output
    }
    

    那么你就可以通过下面的代码来使用这个扩展功能了:

    fun main(args: Array<String>) {
        print("Hello World".reverseCaseOfString())
    }
    

    输出:hELLO wORLD

    目前还没有默认库支持来反转字符串的大小写。

    【讨论】:

      【解决方案3】:

      这是我在这方面的尝试,目的是让代码易于阅读,但也能保持高性能。

      fun String.invertCase(): String {
          val array = this.toCharArray()
          this.forEachIndexed { index, char ->
              when {
                  char.isUpperCase() -> array[index] = char.toLowerCase()
                  char.isLowerCase() -> array[index] = char.toUpperCase()
              }
          }
          return String(array)
      }
      
      val input = "Hello World"
      println(input.invertCase()) // hELLO wORLD
      

      【讨论】:

        【解决方案4】:

        对我来说,一种优雅的方式是:

        1. 为 Char 创建一个扩展函数:

          fun Char.reverseCase(): Char = if (isUpperCase()) toLowerCase() else toUpperCase()

        2. 然后用它为String创建扩展:

          fun String.reverseCase(): String = toCharArray().map { it.reverseCase() }.joinToString("")

        【讨论】:

          猜你喜欢
          • 2010-12-16
          • 1970-01-01
          • 2016-05-03
          • 2011-01-16
          • 1970-01-01
          • 2021-06-11
          • 2016-01-25
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多