Kotlin で文字列を変換するコードを書きました。 今回やったのは次の4つです。
- 先頭を小文字にする
- 先頭を大文字にする
- スネークケースの文字列をキャメルケースにする
- キャメルケースの文字列をスネークケースにする
GitHub で公開しており、 build.gradle に記述することでプロジェクト内で使用可能です。
https://github.com/KenjiOhtsuka/kotlin-case-changer
いずれも拡張関数で書いています。
コード
先頭を小文字にする
fun String.beginWithLowerCase(): String {
return when (this.length) {
0 -> ""
1 -> this.toLowerCase()
else -> this[0].toLowerCase() + this.substring(1)
}
}
正規表現を使う方法もありますね。
先頭を大文字にする
fun String.beginWithUpperCase(): String {
return when (this.length) {
0 -> ""
1 -> this.toUpperCase()
else -> this[0].toUpperCase() + this.substring(1)
}
}
使いみちはないかもしれませんが、小文字にするメソッドがあったので大文字にするメソッドも作りました。
キャメルケースにする
fun String.toCamelCase(): String {
return this.split('_').map {
it.beginWithUpperCase() } .joinToString("")
}
もともとスネークケースのものに対してのみ有効です。
スネークケースにする
fun String.toSnakeCase(): String {
var text: String = ""
var isFirst = true
this.forEach {
if (it.isUpperCase()) {
if (isFirst) isFirst = false
else text += "_"
text += it.toLowerCase()
} else {
text += it
}
}
return text
}
もともとキャメルケースの文字列に対して有効です。 正規表現も考えましたがすぐには思いつきませんでした。
Java から呼び出す場合は?
Java から呼び出す際は、 CaseChanger.method(StringObject)
という形にします。
(拙ブログにあった記事をほぼそのまま移しました。)