Эта библиотека Java/Kotlin предоставляет интуитивно понятный API для преобразования строк между различными текстовыми регистрами. Он имеет широкий спектр встроенной поддержки для наиболее распространенных текстовых случаев. Кроме того, библиотека спроектирована таким образом, чтобы ее можно было легко расширять за счет новых пользовательских текстовых регистров, что делает ее очень гибкой и адаптируемой.
В этом репозитории изменения происходят не так часто и библиотека обновляется очень редко. Однако это не заброшенный проект. Поскольку код относительно прост и имеет хорошее тестовое покрытие, вряд ли есть необходимость что-либо менять.
Эта библиотека доступна на Maven Central. Он состоит из основной библиотеки и дополнительной, предоставляющей расширения для Kotlin.
// Main dependency
implementation ' dev.turingcomplete:test-case-converter:2.0.0 ' // Groovy build script
implementation( " dev.turingcomplete:test-case-converter:2.0.0 " ) // Kotlin build script
// Optional: Kotlin extensions
implementation ' dev.turingcomplete:test-case-converter-kotlin-extension:2.0.0 ' // Groovy build script
implementation( " dev.turingcomplete:test-case-converter-kotlin-extension:2.0.0 " ) // Kotlin build script
<!-- Main dependency -->
< dependency >
< groupId >dev.turingcomplete</ groupId >
< artifactId >test-case-converter</ artifactId >
< version >2.0.0</ version >
</ dependency >
<!-- Optional: Kotlin extensions -->
< dependency >
< groupId >dev.turingcomplete</ groupId >
< artifactId >test-case-converter-kotlin-extension</ artifactId >
< version >2.0.0</ version >
</ dependency >
Основой этой библиотеки являются два интерфейса:
dev.turingcomplete.textcaseconverter.TextCase
. Он предоставляет метаинформацию (например, title()
и example()
) и, посредством нескольких вариантов методов convert*()
, возможность конвертировать текст в этот текстовый регистр или из него.dev.turingcomplete.textcaseconverter.WordsSplitter
, определяющий утилиту, разбивающую текст на список слов. Как правило, мы должны понимать, что преобразователь регистра текста работает со списком слов, а не с необработанным текстом. Это связано с тем, что в каждом текстовом случае слова текста соединяются по-разному. Однако в необработанном тексте машинно не видно, где слово начинается и заканчивается без дополнительного WordsSplitter
. Например, в foo bar baz
начало/конец будет определяться пробелом, а в fooBarBaz
оно будет определяться изменением регистра.
В библиотеке имеется несколько встроенных реализаций обоих интерфейсов в классах StandardTextCases
и StandardWordsSplitters
охватывающих наиболее распространенные текстовые случаи и способы разделения текста на слова (см. следующие главы).
Класс dev.turingcomplete.textcaseconverter.StandardTextCases
содержит статические экземпляры для наиболее распространенных текстовых случаев:
Имя | Пример | Примечание |
---|---|---|
Строгий верблюжий чехол | верблюдSQLCase | Каждый символ верхнего регистра определяет новое слово. |
Мягкий чехол верблюжьего цвета | верблюдSqlCase | Символ верхнего регистра определяет новое слово только в том случае, если предыдущий символ не написан в верхнем регистре. |
Кебаб Дело | кебаб-кейс | |
Змеиный случай | Snake_case | |
Дело о кричащей змее | SCREAMING_SNAKE_CASE | |
Чехол для поезда | Поезд-кейс | |
Кобол Дело | КОБОЛ-CASE | |
Паскаль Кейс | ПаскальКейс | |
Паскаль Змеиный кейс | Pascal_Snake_Case | Первый символ всегда имеет верхний регистр. |
Дело о верблюжьей змее | верблюд_Snake_Case | Использует мягкий верблюжий чехол. Первый символ всегда в нижнем регистре. |
Нижний регистр | строчные буквы | |
Верхний регистр | ПРОПИСНЫЕ РЕГИСТРЫ | |
Перевернутый случай | ПЕРЕВЕРНУТЫЙ СЛУЧАЙ | Регистр каждого символа будет перевернут. |
Альтернативный случай | чередующийся случай | Каждый последующий символ будет иметь случай, противоположный предыдущему символу. Чередование начинается с противоположного первому символу. |
В следующем примере показано использование методов convert*()
интерфейса TextCase
для встроенной реализации Camel Case:
// All will return `fooBarBaz`
// Array of words
StandardTextCases . CAMEL_CASE .convert( " foo " , " bar " , " baz " )
// List of words
StandardTextCases . CAMEL_CASE .convert( List .of( " foo " , " bar " , " baz " ))
// Given a raw text in which the start/end of a word is defined by a space
StandardTextCases . CAMEL_CASE .convert( " Foo bar baz " , StandardWordsSplitters . SPACE )
// Given a raw text that is in Cobol Case and convert it into Camel Case
StandardTextCases . CAMEL_CASE .convertForm( StandardTextCases . COBOL_CASE , " FOO-BAR-BAZ " )
// Identical to the previous one, only the other way around
StandardTextCases . COBOL_CASE .convertTo( StandardTextCases . CAMEL_CASE , " FOO-BAR-BAZ " )
Класс dev.turingcomplete.textcaseconverter.StandardWordsSplitters
предоставляет статические экземпляры для наиболее распространенных способов разделения текста на слова:
), который разбивает текст на (возможно, несколько) пробелов. Пустые слова опускаются.-
). Пустые слова опускаются._
). Пустые слова опускаются.fooBar
будет состоять из двух слов foo
и Bar
, а SQL
— из трех слов S
, Q
и L
fooBar
будет состоять из двух слов foo
и Bar
, а SQL
будет одним словом. Обратите внимание, что каждый TextCase
предоставляет WordsSplitter
через TextCase#wordsSplitter
, который можно использовать для разделения текста, заданного в этом текстовом регистре, на отдельные слова. Это используется внутри, например, когда мы хотим преобразовать один текстовый регистр в другой без необходимости явного указания WordsSplitter
.
Добавляя библиотеку test-case-converter-kotlin-extension
, предоставляются некоторые расширения Kotlin, что упрощает использование этой библиотеки в коде Kotlin. Эти дополнительные возможности можно увидеть на следующем примере:
// Convert the given raw text into Snake Case. Both will return `foo_bar`.
" foo bar " .toTextCase( SNAKE_CASE )
" fooBar " .toTextCase( SNAKE_CASE , UPPER_CASE )
// Will create a `WordsSplitter` that splits words by the delimiter `//`.
" // " .toWordsSplitter()
Некоторые встроенные текстовые регистры и разделители слов используют String#toLowerCase()
или String#toUpperCase()
. Вывод обоих методов зависит от локали. Все вызовы этих методов в этой библиотеке будут использовать Locale
, установленную в статических полях класса dev.turingcomplete.textcaseconverter.Configuration
. По умолчанию используется Locale.ROOT
.
Copyright (c) 2023 Марсель Климаннель
Лицензируется по лицензии Apache версии 2.0 («Лицензия»); вы не можете использовать этот файл, кроме как в соответствии с Лицензией.
Вы можете получить копию Лицензии по адресу https://www.apache.org/licenses/LICENSE-2.0.
Если это не требуется действующим законодательством или не согласовано в письменной форме, программное обеспечение, распространяемое по Лицензии, распространяется на условиях «КАК ЕСТЬ», БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ ИЛИ УСЛОВИЙ, явных или подразумеваемых. См. ЛИЦЕНЗИЮ для конкретного языка, регулирующего разрешения и ограничения в рамках Лицензии.