VB.NETで文字列の比較を完全マスター!EqualsとCompareの使い方
生徒
「VB.NETで、二つの言葉が同じかどうかを調べたいときはどうすればいいんですか?」
先生
「文字列の比較ですね。VB.NETには、Equals(イコールズ)やCompare(コンペア)といった便利な方法が用意されていますよ。」
生徒
「ただイコール(=)で繋ぐだけじゃダメなんですか?」
先生
「もちろんイコールでも調べられますが、大文字と小文字を区別したいときや、どっちが五十音順で先かを知りたいときは、専用の命令を使うのがベストです。」
1. VB.NETの文字列比較とは?
プログラミングの世界で文字列比較(もしじれつひかく)とは、二つの文字データが「全く同じものか」や「どちらが辞書順で先か」を判定することを指します。パソコンは、人間のように『だいたい同じ』という判断が苦手です。一文字でも違えば、それは全く別のものとして扱われます。
例えば、会員サイトにログインする時、入力されたパスワードが登録されているものと一致するか確認する作業は、まさにこの文字列比較の技術が使われています。VB.NET(ヴィジュアルベーシック・ドットネット)では、この比較を正確に行うために、いくつかの特別な命令(メソッド)が準備されています。これらを使い分けることで、より賢いプログラムを作ることができるようになります。
2. 一致を確認するEquals(イコールズ)メソッド
まず紹介するのは、Equals(イコールズ)メソッドです。これは名前の通り、二つの文字列が等しいかどうかを調べるための命令です。初心者の方がよく使う「=(等号)」と似ていますが、より高度な設定ができるのが特徴です。
パソコンのルールでは、アルファベットの大文字「A」と小文字「a」は別の文字として扱われます。しかし、状況によっては「大文字も小文字も同じものとして扱いたい」という時がありますよね。Equalsメソッドを使えば、そういった細かいルールを指定して比較することができます。
Dim word1 As String = "Apple"
Dim word2 As String = "apple"
' 大文字と小文字を区別せずに比較する設定です
If word1.Equals(word2, StringComparison.OrdinalIgnoreCase) Then
Console.WriteLine("二つの言葉は同じです")
Else
Console.WriteLine("二つの言葉は違います")
End If
実行結果は以下のようになります。
二つの言葉は同じです
このように、StringComparison.OrdinalIgnoreCase(ストリング・コンパリゾン・オーディナル・イグノア・ケース)という長い呪文のようなものを添えるだけで、大文字・小文字の差を無視して「同じリンゴだね」と判定してくれるようになります。これがEqualsメソッドの強みです。
3. 順序を調べるCompare(コンペア)メソッド
次に紹介するのは、Compare(コンペア)メソッドです。Compareには「比較する」という意味がありますが、Equalsと違うのは「どちらが先にくるか」という順番まで教えてくれる点です。
これは、名簿を五十音順に並べ替えたり、商品をアルファベット順に整理したりする時に使います。比較した結果は、数字(0、1、-1)で返ってきます。ここが少し初心者には難しく感じるかもしれませんが、ルールはシンプルです。同じなら「0」、一つ目が先なら「負の数」、二つ目が先なら「正の数」となります。
Dim name1 As String = "さとう"
Dim name2 As String = "すずき"
' 二つの名前の順番を比較します
Dim result As Integer = String.Compare(name1, name2)
If result < 0 Then
Console.WriteLine(name1 & "の方が先です")
ElseIf result > 0 Then
Console.WriteLine(name2 & "の方が先です")
Else
Console.WriteLine("同じ名前です")
End If
実行結果は以下のようになります。
さとうの方が先です
このように、並び替えのルールを作るときに欠かせないのがCompareメソッドです。辞書をめくるように、どっちが前にあるかをパソコンに教えてもらうことができます。
4. 特定の文字で始まっているか調べる(StartsWith)
文字列の全体を比較するだけでなく、「ある文字から始まっているか」を調べたい時もあります。これにはStartsWith(スターツ・ウィズ)というメソッドを使います。「~で始まる」という意味ですね。
例えば、たくさんのファイル名の中から「2026年」で始まるものだけを探したい時や、郵便番号が「584」から始まっているか確認したい時に便利です。全体が一致しなくても、出だしさえ合っていれば「はい(True)」と答えてくれます。実際のコードで確認してみましょう。
Dim fileName As String = "20260206_日報.txt"
' 「2026」から始まっているかチェックします
If fileName.StartsWith("2026") Then
Console.WriteLine("2026年のファイルです")
End If
実行結果は以下のようになります。
2026年のファイルです
この機能を使えば、大量のデータの中から特定のグループだけを素早く見つけ出すことができるようになります。非常に実用的な比較方法の一つです。
5. 特定の文字で終わっているか調べる(EndsWith)
StartsWithの逆で、末尾をチェックするのがEndsWith(エンズ・ウィズ)です。これは「~で終わる」という意味です。ファイルの拡張子(.txtや.jpgなど)を判別する際によく使われます。
例えば、読み込んだデータが「.csv」という形式のファイルかどうかを判断して、処理を分けることができます。語尾をチェックするだけで、そのデータが何者なのかを推測できるので、システム開発では非常に役立ちます。
Dim photoName As String = "travel_photo.jpg"
' 「.jpg」で終わっているか確認します
If photoName.EndsWith(".jpg") Then
Console.WriteLine("これは画像ファイルです")
Else
Console.WriteLine("画像ではありません")
End If
実行結果は以下のようになります。
これは画像ファイルです
出だしだけでなく、お尻の文字も比較の対象にできることで、文字列操作の幅がぐんと広がります。StartsWithとセットで覚えておくと非常に強力な武器になります。
6. 指定した文字が含まれているか探す(Contains)
これまでは先頭や末尾を調べましたが、「文章のどこかにその文字が入っているか」を調べるのがContains(コンテインズ)メソッドです。「含んでいる」という意味ですね。検索エンジンのような機能を作るときに最もよく使われる技術です。
例えば、住所録の中から「大阪」という文字が入っている人だけを抽出したり、メールの本文に「至急」という言葉があるか調べたりできます。一部が含まれているかどうかを比較できるので、曖昧な条件でデータを探すのに最適です。
Dim address As String = "大阪府富田林市"
' 「富田林」という文字が含まれているかチェックします
If address.Contains("富田林") Then
Console.WriteLine("地域が一致しました")
End If
実行結果は以下のようになります。
地域が一致しました
このようにContainsを使えば、文字列全体の中から目的の言葉を宝探しのように見つけ出すことができます。これも立派な比較の一種です。
7. 正確な比較を行うための注意点
最後に、文字列の比較を成功させるための大事なポイントを説明します。パソコンは非常に几帳面なので、見た目では気付かない「全角と半角」の違いや「余計な空白」があるだけで、比較の結果を「違う」と言ってしまいます。
例えば、半角の「A」と全角の「A」は別の文字です。また、「田中」と「田中 」(最後にスペースがある)も別の文字です。比較する前には、Trimメソッドを使って空白を消したり、全角・半角を統一したりする「お掃除(データクレンジング)」が大切です。この一手間を加えるだけで、比較の精度は劇的に上がり、バグ(プログラムのミス)の少ないシステムを作ることができます。
VB.NETでの比較は、ただ文字を比べるだけでなく、相手の環境や入力のクセを考慮してあげる優しさが必要です。今回学んだEqualsやCompareを使いこなし、正確で思いやりのあるプログラムを目指していきましょう!