Kotlinには文字列操作のためのさまざまな拡張関数が用意されています。その中でも、replaceはシンプルに使えるうえに応用範囲も広い便利な関数です。文字列の部分的な置換から正規表現を活用した高度な変換まで対応できるので、ぜひ活用してみてください。

本記事から「Kotlin入門」として初心者向けにサンプルコードをできる限りそのままコピペで動くようにコード内にmain()を用意し、また、Kotlin Playgroundのリンクからサンプルコードを実行できるように記事を試しに作ってみます。
それとは別に、これまでのシンプルな記事も併用していく予定です。
replace関数とは
replace関数は、文字列の中から指定したパターンを探し、それを別の文字列に置き換えて返してくれるKotlin標準ライブラリの関数です。
一番シンプルな使用例は以下のようになります。
fun main() {
val original = "Hello Kotlin World"
val replaced = original.replace("Kotlin", "Java")
println(replaced) // Hello Java World
}
- 第1引数:置き換えの対象となる文字列
- 第2引数:新しく置き換えたい文字列
実行結果は「Hello Java World」が表示されます。基本的には文字列を探して、見つかった部分をすべて置き換えるイメージです。
大文字小文字を無視した置換(ignoreCase)
標準のreplaceでは大文字小文字の区別をしますが、ignoreCase = true
を指定すると、同じ文字列として扱ってくれます。
fun main() {
val original = "Hello kotlin World"
val replaced = original.replace("KOTLIN", "Java", ignoreCase = true)
println(replaced) // Hello Java World
}
- 「kotlin」「KOTLIN」「Kotlin」などがすべて同一とみなされます。
- 大文字小文字の入力ゆれがある場合に便利です。
正規表現(Regex)を使った置換
置換の対象を正規表現(Regex)で指定すると、より柔軟な文字列操作が可能になります。
たとえば、1つ以上連続する数字(\d+)を「#」に置き換えたい場合は以下のように書けます。
fun main() {
val text = "User123 scored 456 points"
val replaced = text.replace(Regex("\\d+"), "#")
println(replaced) // User# scored # points
}
"\\d+"
は数字が1文字以上連続する部分をマッチします。- 見つかった箇所をすべて「#」に置き換えることができます。
ラムダ式を使って動的に変換する
replace
に正規表現を用いた場合、ラムダ式でマッチした文字列を受け取り、動的に変換して返すことができます。
fun main() {
val text = "User123 scored 456 points"
val replaced = text.replace(Regex("\\d+")) { matchResult ->
// 数値を2倍にして文字列として返す例
val number = matchResult.value.toInt()
(number * 2).toString()
}
println(replaced) // User246 scored 912 points
}
matchResult.value
からマッチした文字列を取得- 変換して返す内容を自由にカスタマイズ可能
最初の一箇所だけを置換:replaceFirst
文字列中のすべてではなく、最初に見つかった箇所だけを置換したい場合は、replaceFirst
が役立ちます。
fun main() {
val text = "Kotlin Kotlin Kotlin"
val replaced = text.replaceFirst("Kotlin", "Java")
println(replaced) // Java Kotlin Kotlin
}
- 最初にヒットした「Kotlin」のみが「Java」に変わります。
注意点
- パフォーマンス
- 非常に大きい文字列や、多数の置換を繰り返す場合は、処理回数によってパフォーマンスに影響が出る可能性があります。処理をまとめるなど工夫してみてください。
- 意図しない置換
- 正規表現のパターンが広範囲にマッチしすぎると、必要以上に置換が行われることがあります。テストを繰り返して慎重に使いましょう。
- 大文字小文字
- デフォルトのreplaceは大文字小文字を区別します。
- もし区別したくない場合は
ignoreCase = true
を忘れずに指定してください。
まとめ
Kotlinのreplace関数を使うと、文字列中の特定の部分を手軽に置き換えられ、正規表現を活用することで高度なパターンマッチにも対応できます。
- すべてを置換:
replace
- 最初の1箇所だけ:
replaceFirst
- 大文字小文字の無視:
ignoreCase = true
- ラムダ式で動的変換:
text.replace(Regex("\\d+")) { ... }
文字列処理でよく使われる機能なので、用途に合わせて使い分けるとコードがスッキリするはずです。
ぜひ実際に試してみて、より柔軟な文字列操作を利用してみてください。