Kotlinで指定した数だけひらがなをランダムな文字列として生成する
2022-07-11
はじめに
業務の Android プロジェクトでランダムにひらがなを生成し、テストを書きたい場面がありました。半角英数字をランダムな文字列として生成する方法はすぐに分かったのですが、ひらがなでの方法がいまいち分かりませんでした。
色々調査した結果、正規表現ではひらがなとマッチするパターンを表すときに、Unicode の範囲で指定できることを知りました。これを Kotlin でも指定すれば動くんじゃね?という考えにいたりました。実際にこの Unicode での範囲(CharRange)を指定して Kotlin でひらがなをランダムな文字列として生成出来 たっぽいので紹介します。
実装方法
TestHelper.kt
object TestHelper {
fun generateRandomHiragana(size: Int): String {
// unicodeの「ぁ」から「ゟ」の範囲(ひがらな全部)
val charset = ('\u3040'..'\u309F')
return (0 until size)
.map { charset.random() }
.joinToString("")
}
}
Unicode ではひらがなブロックとして、\u3040
(ぁ)から、\u309F
(ゟ)が割り当てられているそうです。この Unicode の範囲を CharRange で指定して、欲しい文字列の長さの回数分だけ、ひらがなの Unicode の範囲内からランダムに返して Char を合体すれば、ランダムなひらがなを文字列として返すようになります。
ちなみになんですが、半角英数字の場合は以下のようにすればいいみたいでした(参考)。
TestHelper.kt
object TestHelper {
fun generateRandomAlphanumeric(size: Int): String {
val charset = ('a'..'z') + ('A'..'Z') + ('0'..'9')
return (0 until size)
.map { charset.random() }
.joinToString("")
}
}
最後に
理屈が分かれば実装自体はかんたんでした。この Unicode の方法さえ分かれば、漢字、フランス語、韓国語、何でもランダムな文字列として生成できそうだなと思いました。あとは、英数字を英語で Alphanumeric というのをはじめて知りました。