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

У меня есть строка, как

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

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

Regex используется для сопоставления с образцом. Я не думаю, что его можно использовать для переключения корпуса.

Arun Gowda 07.04.2019 10:10

… К тому же, это уже выглядит нормально. Я бы предпочел немного оптимизировать читаемость кода, но в целом все в порядке.

Arvid 07.04.2019 10:11

Я имею в виду, что это выполнимо. Но это излишне усложнит его и повлияет на производительность.

Arun Gowda 07.04.2019 10:14
В чем разница между методом "==" и equals()
В чем разница между методом "==" и equals()
Это один из наиболее часто задаваемых вопросов новичкам на собеседовании. Давайте обсудим его на примере.
Замена символа по определенному индексу в JavaScript
Замена символа по определенному индексу в JavaScript
В JavaScript существует несколько способов заменить символ в строке по определенному индексу.
2
3
105
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

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

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

println("HEllo WoRLd".swapCase()) // heLLO wOrlD

Другие вопросы по теме