Kotlinで文字列操作!初心者がマスターするための12選

Kotlinで文字列を操作するためのイラストとテキストの解説Kotlin
この記事は約20分で読めます。

 

【サイト内のコードはご自由に個人利用・商用利用いただけます】

この記事では、プログラムの基礎知識を前提に話を進めています。

説明のためのコードや、サンプルコードもありますので、もちろん初心者でも理解できるように表現してあります。

基本的な知識があればカスタムコードを使って機能追加、目的を達成できるように作ってあります。

※この記事は、一般的にプロフェッショナルの指標とされる『実務経験10,000時間以上』を凌駕する現役のプログラマチームによって監修されています。

サイト内のコードを共有する場合は、参照元として引用して下さいますと幸いです

※Japanシーモアは、常に解説内容のわかりやすさや記事の品質に注力しております。不具合、分かりにくい説明や不適切な表現、動かないコードなど気になることがございましたら、記事の品質向上の為にお問い合わせフォームにてご共有いただけますと幸いです。
(送信された情報は、プライバシーポリシーのもと、厳正に取扱い、処分させていただきます。)

はじめに

Kotlinの世界へようこそ!

Kotlinは、現代のプログラミング言語として人気を博しており、特にAndroidアプリの開発においては主要な言語となっています。

そして、文字列操作はプログラミングの中で非常に頻繁に行われる作業の一つです。

この記事を読めば、Kotlinでの文字列操作をスムーズに行うことができるようになります。

初心者の方でも安心して学べるよう、基本的な操作から応用的な操作、そしてよくあるトラブルとその解決法まで、わかりやすく徹底的に解説していきます。

●Kotlinとは

Kotlinは、JetBrains社によって開発された静的型付けのプログラミング言語です。

Javaとの互換性を持ちながら、より簡潔で表現力豊かな文法が特徴です。

そのため、Javaの代わりにKotlinを選択する開発者が増えてきました。

特に、GoogleがAndroidの公式言語としてKotlinを推奨してから、その人気は一層増しています。

○Kotlinの特徴と文字列操作の重要性

Kotlinの最大の特徴は、Javaよりも簡潔な文法でありながら、高度な機能を持っていることです。

例えば、Null安全や拡張関数、データクラスなど、開発を助ける多くの特性が備わっています。

文字列操作とは、文字列を加工したり、部分的に取り出したり、別の文字列と組み合わせたりすることを指します。

日常の生活で使われる多くのアプリケーションにおいて、文字列操作は欠かせない要素となっています。

例えば、ユーザー名を正しく表示するためや、テキストデータを解析して必要な情報を取り出すためなど、さまざまなシチュエーションで文字列操作の技術が求められます。

そしてKotlinでは、この文字列操作を非常に簡単に、そして強力に行うことができるため、Kotlinを学ぶ際には、文字列操作の基本をしっかりと身につけることが大切です。

●Kotlinの文字列操作の基本

文字列操作の技術は、プログラミングの中で非常に基本的かつ重要なスキルとなります。

特に、KotlinではJavaよりも簡潔に、そして効率的に文字列を扱うことが可能です。

ここでは、その基本的な操作方法を解説していきます。

○文字列の生成と表示

Kotlinで文字列を生成する方法はいくつかありますが、最も基本的なのはダブルクオーテーション(” “)を使って定義する方法です。

val message = "こんにちは、Kotlin!"
println(message) // コンソールに「こんにちは、Kotlin!」と表示されます。

このコードでは”こんにちは、Kotlin!”という文字列をmessageという変数に代入し、println関数を使ってコンソールに出力しています。

○文字列の連結

Kotlinでは、+を使用して文字列を連結することができます。

val firstName = "太郎"
val lastName = "田中"
val fullName = lastName + firstName
println(fullName) // 「田中太郎」と表示されます。

このコードでは、firstNamelastNameという変数の文字列を連結して、fullNameとして出力しています。

○文字列の置換

replace関数を使用することで、文字列内の特定の部分を別の文字列に置き換えることができます。

val oldText = "私はJavaが好きです。"
val newText = oldText.replace("Java", "Kotlin")
println(newText) // 「私はKotlinが好きです。」と表示されます。

このコードでは”Java”を”Kotlin”に置き換えて、新しい文字列を生成しています。

○文字列の部分取得

substring関数を使用して、文字列から特定の部分だけを取り出すことができます。

val text = "Kotlinは楽しい!"
val part = text.substring(0, 6)
println(part) // 「Kotlin」と表示されます。

このコードでは、0番目から6番目の文字までを取り出して、新しい部分文字列を生成しています。

●実践!Kotlinの文字列操作サンプルコード

Kotlinでの文字列操作を実際に体験することで、理解を深めることができます。

ここでは、日常的によく使用される実用的な文字列操作のサンプルコードを幾つか紹介しています。

○サンプルコード1:文字列の逆順表示

Kotlinで文字列を逆順に表示するための方法を解説します。

reversed()という関数を使用することで、文字列の逆順を簡単に取得することができます。

val originalText = "Kotlin"
val reversedText = originalText.reversed()
println(reversedText)

このコードでは、”Kotlin”という文字列を逆順にして出力します。

結果として、「niltoK」と表示されます。

○サンプルコード2:文字列の特定文字のカウント

特定の文字や文字列が、与えられた文字列の中で何回現れるかをカウントする方法について学びます。

count()関数を利用して、特定の条件に一致する文字の数を数えることができます。

val text = "Kotlin is fun. Kotlin is powerful."
val countKotlin = text.count { it == 'K' }
println("Kの文字は$countKotlin 回含まれています。")

このコードを実行すると、”Kotlin is fun. Kotlin is powerful.”という文章中に「K」という文字が何回含まれているかをカウントします。

結果として、「Kの文字は2回含まれています。」と出力されます。

○サンプルコード3:文字列の大文字・小文字変換

Kotlinでは、文字列を全て大文字や小文字に変換する方として、toUpperCase()メソッドとtoLowerCase()メソッドを使用します。

これらのメソッドは非常に便利で、例えばユーザーからの入力を正規化する際や、大文字・小文字を気にせずに文字列を比較したいときなどに使用することができます。

val originalString = "Kotlin Programming"
val upperCaseString = originalString.toUpperCase()
val lowerCaseString = originalString.toLowerCase()
println("元の文字列: $originalString")
println("大文字変換後: $upperCaseString")
println("小文字変換後: $lowerCaseString")

このコードでは、”Kotlin Programming”という文字列を全て大文字および小文字に変換して表示しています。

実行すると、次のような結果が得られます。

元の文字列: Kotlin Programming
大文字変換後: KOTLIN PROGRAMMING
小文字変換後: kotlin programming

○サンプルコード4:文字列の特定文字を含むかの判定

文字列に特定の文字や文字列が含まれているかどうかを判定するには、contains()メソッドを使用します。

このメソッドは、対象となる文字列が引数として指定された文字列を含むかどうかをBoolean値で返します。

val sampleString = "Kotlin is fun to learn."
val keyword = "fun"
val containsKeyword = sampleString.contains(keyword)
if (containsKeyword) {
    println("$sampleString には $keyword が含まれています。")
} else {
    println("$sampleString には $keyword が含まれていません。")
}

このコードは、”Kotlin is fun to learn.”という文字列に”fun”というキーワードが含まれているかを判定しています。

結果として、「Kotlin is fun to learn. には fun が含まれています。」と出力されます。

○サンプルコード5:文字列の分割

文字列の分割は、データの解析や文字列処理で頻繁に必要とされる操作の一つです。

特定の区切り文字を基準に、文字列を複数の部分に分けることができます。

Kotlinでは、この操作を簡単に行うためのsplit()メソッドが提供されています。

例として、カンマで区切られたデータをリストに変換する場合を考えましょう。

val csvData = "Kotlin,Java,Python,JavaScript"
val dataList = csvData.split(",")
println(dataList)

このコードでは、カンマで区切られたcsvDataという文字列を、split()メソッドを使用してリストに変換しています。

実行すると、[Kotlin, Java, Python, JavaScript]というリストが得られます。

また、複数の区切り文字を指定することも可能です。

たとえば、カンマやセミコロンを区切り文字として使用したい場合は次のように書けます。

val mixedData = "Kotlin,Java;Python,JavaScript"
val mixedList = mixedData.split(",", ";")
println(mixedList)

この場合、実行結果として[Kotlin, Java, Python, JavaScript]というリストが得られます。

複数の区切り文字を指定する場合、split()メソッドの引数として文字列を複数渡すことで対応できます。

○サンプルコード6:文字列の前後の空白の除去

時々、ファイルから読み込んだデータやユーザー入力など、文字列の前後に不要な空白やタブが存在することがあります。

これらの不要な空白を取り除くには、Kotlinのtrim()メソッドを使用します。

val stringWithSpaces = "    Kotlin is fun!    "
val trimmedString = stringWithSpaces.trim()
println("|$stringWithSpaces|")
println("|$trimmedString|")

このコードでは、前後にスペースが付加された文字列から、trim()メソッドを使用して空白を除去しています。

実行すると、| Kotlin is fun! |という文字列が|Kotlin is fun!|に変換されたことが確認できます。

○サンプルコード7:文字列の特定位置の文字取得

文字列から特定の位置の文字を取得する操作は、多くのプログラミングタスクにおいて基本となるものです。

Kotlinでは、文字列を配列のように扱い、インデックスを指定することで簡単に特定位置の文字を取得することができます。

例えば、次のようなコードを考えてみましょう。

val word = "Kotlin"
val charAtIndex3 = word[3]
println("3番目の文字は: $charAtIndex3")

このコードは、”Kotlin”という文字列から4番目の文字(インデックスは0から始まるため)を取得しています。

このコードを実行すると、”3番目の文字は: l”と表示されます。

インデックスを使って文字列から文字を取得することは非常に便利ですが、存在しないインデックスを指定するとエラーが発生する点に注意が必要です。

例えば、上記の文字列で10番目の文字を取得しようとすると、エラーが発生します。

このような場合は、文字列の長さを事前に確認してから文字を取得するようにしましょう。

○サンプルコード8:文字列の長さ取得

文字列の長さを取得することは、文字列操作において頻繁に行われる基本的な操作です。

例えば、文字列が一定の長さ以上かどうかを確認したり、ループ処理で文字列の各文字を一つずつ処理する際などに使用します。

Kotlinでは、lengthプロパティを使って文字列の長さを簡単に取得することができます。

ここでは、文字列の長さを取得するサンプルコードを紹介します。

val word = "KotlinProgramming"
val lengthOfWord = word.length
println("文字列の長さは: $lengthOfWord")

このコードは、”KotlinProgramming”という文字列の長さを取得して、結果を表示します。

実行すると、”文字列の長さは: 17″と表示されます。

○サンプルコード9:文字列と数字の相互変換

文字列と数字の変換は、プログラミングのさまざまな場面で必要となる操作です。

Kotlinにおいても、この変換はシンプルに行うことができます。

具体的には、数値を文字列に変換したり、文字列を数値に変換したりすることが考えられます。

まず、数字を文字列に変換する方法から説明します。

これは非常にシンプルで、toString()メソッドを使用するだけです。

val number = 123
val strNumber = number.toString()
println("数字を文字列に変換: $strNumber")

このコードでは、数字の123を文字列に変換し、結果を表示しています。

実行すると、”数字を文字列に変換: 123″と表示されます。

次に、文字列を数字に変換する方法を見ていきます。

KotlinではtoInt()toDouble()などのメソッドを使って、文字列を整数や浮動小数点数に変換することができます。

val str = "456"
val intNumber = str.toInt()
println("文字列を数字に変換: $intNumber")

このコードを実行すると、文字列の”456″が整数の456に変換され、”文字列を数字に変換: 456″と表示されます。

ただし、数字以外の文字を含む文字列を数値に変換しようとすると、エラーが発生するため注意が必要です。例えば、”456a”のような文字列をtoInt()で変換しようとするとエラーになります。

このような場合、事前に文字列が数値に変換可能かどうかを確認する、あるいは適切な例外処理を行うことが推奨されます。

○サンプルコード10:文字列のパターンマッチング

文字列のパターンマッチングは、特定の文字やパターンが文字列内に存在するかどうかを調べる際に使用します。

Kotlinでは、正規表現を用いて簡単にパターンマッチングを行うことができます。

例として、ある文字列がメールアドレスの形式になっているかをチェックする方法を考えてみましょう。

val emailPattern = "^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,6}$".toRegex()
val email = "test@example.com"
if (email.matches(emailPattern)) {
    println("$email はメールアドレスの形式です。")
} else {
    println("$email はメールアドレスの形式ではありません。")
}

このコードでは、正規表現を用いてメールアドレスの形式を表現しています。

そして、matchesメソッドを使用して、指定した文字列がそのパターンに一致するかどうかをチェックしています。

上記の例の場合、”test@example.com はメールアドレスの形式です。”と表示されます。

○サンプルコード11:文字列の特定文字の置換

文字列の中の特定の文字や文字列を別の文字や文字列に置き換える操作は、日常的なプログラミング作業で頻繁に必要とされます。

Kotlinではreplaceメソッドを使用して、この操作を容易に実行できます。

まず、単純な文字の置換から考えてみましょう。

例えば、文字列の中の”a”を”b”に置き換える場合のコードは以下のようになります。

val original = "banana"
val replaced = original.replace("a", "b")
println(replaced)  // 結果は"bbnbnb"

このコードでは、”banana”という文字列内の全ての”a”を”b”に置き換えています。

また、正規表現を使用して複雑なパターンの文字列を置換することもできます。

例として、文字列の中の数字を全て”*”に置き換える場合は以下のようになります。

val originalText = "Apple 10, Orange 20, Grape 30"
val replacedText = originalText.replace(Regex("\\d+"), "*")
println(replacedText)  // 結果は"Apple *, Orange *, Grape *"

このコードを使用すると、文字列内のすべての数字が”*”に置き換えられます。

○サンプルコード12:複数の文字列の比較

プログラミングにおいて、文字列の比較も非常に重要な操作の一つです。

Kotlinでは、==を使って文字列の内容が等しいかどうかを確認することができます。

また、compareToメソッドを使用して、2つの文字列を辞書順で比較することもできます。

ここでは、==を使用して文字列を比較するサンプルを紹介します。

val str1 = "apple"
val str2 = "apple"
val str3 = "orange"

if (str1 == str2) {
    println("str1とstr2は同じ内容です。")
}

if (str1 != str3) {
    println("str1とstr3は異なる内容です。")
}

このコードを実行すると、”str1とstr2は同じ内容です。”と”str1とstr3は異なる内容です。”という結果が得られます。

また、compareToメソッドを用いて文字列の比較をする方法は次のとおりです。

val result = str1.compareTo(str3)
if (result < 0) {
    println("str1はstr3より辞書順で前に来ます。")
} else if (result == 0) {
    println("str1とstr3は同じ内容です。")
} else {
    println("str1はstr3より辞書順で後ろに来ます。")
}

このコードでは、”apple”と”orange”を辞書順で比較しています。

結果として、”str1はstr3より辞書順で前に来ます。”が出力されます。

●文字列操作の応用例

Kotlinの文字列操作を学ぶ上で、基本的な操作だけでなく、それらを組み合わせた応用例も非常に重要です。

日常的なタスクで頻繁に遭遇する場面や、より実践的なシナリオでの文字列操作を考えてみましょう。

○サンプルコード応用1:日付フォーマットの変更

日付のフォーマットを変更することは、データの表示や保存時に頻繁に行われます。

ここでは、”yyyy/MM/dd”のフォーマットから”dd-MM-yyyy”のフォーマットに日付を変更するKotlinのコードを紹介します。

val originalDate = "2023/10/03"
val changedDate = originalDate.replace(Regex("(\\d{4})/(\\d{2})/(\\d{2})"), "$3-$2-$1")
println(changedDate)  // 03-10-2023と表示される

このコードでは、正規表現を使って日付の各部分をキャプチャし、それらを置き換える形で新しいフォーマットに変更しています。

○サンプルコード応用2:CSVデータのパース

CSVデータのパースは、データの取り扱いにおいてよく行われる作業の一つです。

ここでは、CSV形式の文字列をパースして、それぞれの要素をリストに格納するKotlinのコードを紹介します。

val csvData = "apple,orange,grape,banana"
val itemList = csvData.split(",")
println(itemList)  // [apple, orange, grape, banana]と表示される

このコードでは、splitメソッドを用いてコンマで区切られた文字列をリストに変換しています。

リストの形式でデータを取り扱うことで、後続の処理が容易になります。

●Kotlinの文字列操作の注意点と対処法

Kotlinで文字列操作を行う際には、いくつかの注意点とそれに対する対処法が存在します。

これらを理解することで、効率的かつ安全に文字列操作を行うことが可能になります。

○nullと空文字列の違い

Kotlinでは、String?型の文字列はnullを持つことができます。

これはJavaとの大きな違いの一つです。

しかし、nullと空文字列(“”)は異なるものであり、混同するとバグの原因となる可能性があります。

対処法として、nullチェックを行う際には、isNullOrEmpty()isNullOrBlank()のメソッドを利用することで、nullや空文字列の両方を安全に判定できます。

val str: String? = getSomeString() // 何らかの文字列を取得するメソッド
if (str.isNullOrEmpty()) {
    println("文字列はnullまたは空です")
}

○文字列比較時の==と===

Kotlinでは、==は文字列の内容の比較、===は参照の比較を行います。

これはJavaのequals()==にそれぞれ対応しています。

対処法として、文字列の内容を比較する際には==を使用し、オブジェクトの参照が同一であるかを確認する際には===を使用します。

val str1 = "Hello"
val str2 = "Hel" + "lo"
println(str1 == str2)  // trueが出力される
println(str1 === str2) // falseが出力される

○大量の文字列の連結

繰り返し処理の中で大量の文字列を連結する際に、+演算子を使用すると非効率的な場合があります。

対処法として、大量の文字列の連結を行う場合は、StringBuilderを使用することで効率的に連結を行うことができます。

val builder = StringBuilder()
for (i in 1..100) {
    builder.append(i)
}
println(builder.toString())  // 12345678910...という文字列が出力される

●カスタマイズ方法:より効率的な文字列操作のためのTips

文字列操作は日常的なプログラムにおいて頻繁に行われるものです。

Kotlinでも例外ではありません。

ここでは、Kotlinにおける文字列操作をより効率的に行うためのカスタマイズ方法やTipsを紹介します。

○正規表現を駆使する

文字列操作において正規表現は非常に強力なツールとなります。

例えば、特定のパターンにマッチする文字列を検索したり、置換したりする際に役立ちます。

val regex = """\d{3}-\d{4}""".toRegex() // 郵便番号のパターン
val text = "住所は123-4567の東京都です"
val hasPostalCode = regex.containsMatchIn(text) // true

このコードでは正規表現を使って、指定したテキスト内に郵便番号のパターンが含まれているかを確認しています。

実行すると、hasPostalCodeにはtrueが代入されます。

○拡張関数を利用する

Kotlinは拡張関数という機能を持っており、既存のクラスに新しいメソッドを追加することができます。

これを利用して、文字列操作を簡単に行えるようにカスタマイズすることができます。

fun String.reverse(): String {
    return this.reversed()
}

val word = "Kotlin"
println(word.reverse()) // niltoK

このコードでは、Stringクラスにreverseというメソッドを追加しています。

このメソッドを実行すると、文字列が逆順になった結果を返します。

○ラムダ式と高階関数を活用する

Kotlinでは、ラムダ式や高階関数を活用して、より柔軟な文字列操作を行うことができます。

特に文字列のリストやコレクションを操作する際に役立ちます。

val list = listOf("apple", "banana", "cherry")
val uppercaseList = list.map { it.uppercase() }
println(uppercaseList) // [APPLE, BANANA, CHERRY]

このコードでは、ラムダ式とmap関数を使用して、文字列のリストの各要素を大文字に変換しています。

まとめ

Kotlinでの文字列操作は、非常に強力で柔軟性があります。

この記事を通じて、基本的な操作から応用的なTipsまでさまざまな方法を解説してきました。

特に、正規表現の活用や拡張関数の利用、ラムダ式と高階関数の組み合わせなど、Kotlin独特の機能を駆使することで、効率的かつ効果的な文字列操作が可能となります。

初心者の方も、これらの知識を身につけることで、日々のプログラミング作業がよりスムーズになることでしょう。

文字列操作は多くのプログラムにおいて必須のスキルですので、今回学んだ知識をしっかりと活用し、より高度なプログラミングを目指してください。