Есть ли регулярное выражение для переключения символов в строке? - PullRequest
2 голосов
/ 07 апреля 2019

У меня есть строка наподобие

var str = "AbCdEfGhIj"

, которую я хочу переключить для каждого символа, то есть

преобразовать ее в var str = "aBcDeFgHiJ"

Я в настоящее времяиспользуя этот код ниже

val bytes = "HEllo WoRLd".toByteArray()
// Swap upper and lower case letters.
    for (i in bytes.indices) {
        if (bytes[i] >= 'A'.toByte() && bytes[i] <= 'Z'.toByte())
            bytes[i] = ('a'.toInt() + (bytes[i] - 'A'.toByte())).toByte()
        else if (bytes[i] >= 'a'.toByte() && bytes[i] <= 'z'.toByte())
            bytes[i] = ('A'.toInt() + (bytes[i] - 'a'.toByte())).toByte()
    }
 System.out.print(String(bytes)) // heLLO wOrlD

Интересно, есть ли регулярное выражение, которое может сделать это

1 Ответ

3 голосов
/ 07 апреля 2019

Как говорится в комментариях, регулярные выражения предназначены для сопоставления, а не изменения.

Но код в вопросе может быть улучшен; это не удастся для не-ASCII символов (и это излишне сложно). Вот более элегантная версия, в качестве функции расширения на String:

fun String.swapCase() = map {
    when {
        it.isUpperCase() -> it.toLowerCase()
        it.isLowerCase() -> it.toUpperCase()
        else -> it
    }
}.joinToString("")

println("HEllo WoRLd".swapCase()) // heLLO wOrlD
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...