Как я могу преобразовать строку случая верблюда в случай змеи и обратно в idiomati c Kotlin? - PullRequest
1 голос
/ 31 января 2020

Ищите код, который будет выполнять преобразования, подобные следующему: «MyCamelCaseA» в «my_camel_case_a», «AMultiWordString» в «a_multi_word_string», «my_camel_case_a», в «myCamelCaseA» или «MyCamelCaseA», «a_multi_word» »WringWringString или 1001 *

Ответы [ 2 ]

1 голос
/ 31 января 2020

Вот расширения класса String, которые используют регулярное выражение и замены для преобразования строки из случая верблюда в случай змеи и из случая змеи в случай верблюда:

val camelRegex = "(?<=[a-zA-Z])[A-Z]".toRegex()
val snakeRegex = "_[a-zA-Z]".toRegex()

// String extensions
fun String.camelToSnakeCase(): String {
    return camelRegex.replace(this) {
        "_${it.value}"
    }.toLowerCase()
}

fun String.snakeToLowerCamelCase(): String {
    return snakeRegex.replace(this) {
        it.value.replace("_","")
            .toUpperCase()
    }
}

fun String.snakeToUpperCamelCase(): String {
    return this.snakeToLowerCamelCase().capitalize()
}

Вот примеры использования расширения String :

print("${"MyCamelCaseA".camelToSnakeCase()}\n")
my_camel_case_a
print("${"AMultiWordString".camelToSnakeCase()}\n")
a_multi_word_string
"my_camel_case_a".snakeToLowerCamelCase()
myCamelCaseA
"my_camel_case_a".snakeToUpperCamelCase()
MyCamelCaseA
0 голосов
/ 01 февраля 2020

Вот мой пример:

fun String.camelToSnakeCase() = fold(StringBuilder(length)) { acc, c ->
    if (c in 'A'..'Z') (if (acc.isNotEmpty()) acc.append('_') else acc).append(c + ('a' - 'A'))
    else acc.append(c)
}.toString()

Мой подход также написан в форме функции расширения, но он не использует регулярные выражения, вместо этого идет посимвольный, обрабатывает их и сворачивает результат обработки в аккумулятор, который в начале является пустым StringBuilder. Обработка выглядит следующим образом:

  • , если символ не является заглавной латинской буквой, добавьте его в аккумулятор как
  • , если символ равен заглавная латинская буква, затем также проверьте, не является ли это первым символом строки (аккумулятор не пуст). Если это не так, то добавьте подчеркивание к аккумулятору. Наконец, добавьте символ в нижнем регистре.

Следует отметить, что используется kotlin.text.StringBuilder, а не JDK.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...