Back to Top

プログラムの覚書

Category: VB.NET

VB.NET

VB.NET 文字列の比較をする

文字列の比較には、幾つかの方法があります。その方法を記載します。

文字列を比較する

Dim str1 As String = "12345"
Dim str2 As String = "67890"
    
If str1 < str2 Then
    MessageBox.Show(str2 & " の方が大きい")
End If
又は
If str1.CompareTo(str2) < 0 Then
    MessageBox.Show(str2 & " の方が大きい")
End If
又は
If String.Compare(str1, str2) < 0 Then
    MessageBox.Show(str2 & " の方が大きい")
End If


分かりにくいのでCase文にすると以下のようになります
Select Case str1.CompareTo(str2)
    Case 0
        MessageBox.Show("等しい")
    Case Is > 0
        MessageBox.Show(str1 & " の方が大きい")
    Case Is < 0
        MessageBox.Show(str2 & " の方が大きい")
End Select

 

文字列を大文字小文字を区別しないで比較する

Dim str1 As String = "ABCDEF"
Dim str2 As String = "abcdef"

If String.Compare(str1, str2, True) = 0 Then
    MessageBox.Show("等しい")
End If

 

先頭文字列または末尾文字列と一致するか比較する

Dim str As String = "ABCDEabcdeあいう"

'先頭の文字列と一致するかどうかを判断する
If str.StartsWith("ABCDE") Then
    MessageBox.Show("先頭の文字列と一致")
End If

'末尾の文字列と一致するかどうかを判断する
If str.EndsWith("あいう") Then
    MessageBox.Show("末尾の文字列と一致")
End If

 

空の文字列を比較する

Dim str As String = String.Empty
又は
Dim str As String = ""

If str = String.Empty Then
    MessageBox.Show("空の文字列")
End If

If str.Length = 0 Then
    MessageBox.Show("空の文字列")
End If

If str = "" Then
    MessageBox.Show("空の文字列")
End If

If str.CompareTo("") = 0 Then
    MessageBox.Show("空の文字列")
End If

If String.Compare(str, "") = 0 Then
    MessageBox.Show("空の文字列")
End If

以上の結果は全て空の文字列となる

 

String.Equals メソッドを使用する方法

Equals は、StringComparison列挙体の値を指定することができ、大文字と小文字を区別しない比較や、カルチャに依存した比較ができます。

Dim str1 As String = "ABCDEF"
Dim str2 As String = "abcdef"

Dim bc1 As Boolean = str1.Equals(str2, StringComparison.CurrentCulture)

Dim bc2 As Boolean = str1.Equals(str2, StringComparison.CurrentCultureIgnoreCase)

 

VB.NET 文字列内の文字・文字列検索をする

文字列中の文字・文字列を検索する方法を説明します。

文字列の検索する方法は、幾つかの方法があります。以下に記載します。

IndexOf・LastIndexOf を使用する方法

String.IndexOf メソッドを使用して、先頭から文字・文字列を検索する

Dim str As String = "ABcDEabcdeあいう"

'先頭から 'あ' を検索し、見つかった位置を取得
Dim inx1 As Integer = str.IndexOf("あ"c)          '文字検索
又は
Dim inx1 As Integer = str.IndexOf("あ")           '文字列検索
    
'3文字目の後から 'c' を検索し、見つかった位置を取得
Dim inx1 As Integer = str.IndexOf("c"c, 3)

'1文字目の後から12文字以内で "bc" を検索し、見つかった位置を取得
Dim inx1 As Integer = str.IndexOf("bc", 1, 12)

 

String.LastIndexOf メソッドを使用して、末尾から文字・文字列を検索する

Dim str As String = "ABcDEabcdeあいう"

' 末尾から 'あ' を検索し、見つかった位置を取得
Dim inx1 As Integer = str.LastIndexOf("あ"c)

'7文字目の後から "c" を検索し、見つかった位置を取得
Dim inx1 As Integer = str.LastIndexOf("c"c, 7)

'9文字目の後から10文字以内(前に数える)で "bc" を検索し、見つかった位置を取得する
Dim inx1 As Integer = str.LastIndexOf("bc", 9, 10)

 

IndexOf・LastIndexOf で大文字小文字を区別しないで検索する

StringComparison列挙体にて、カルチャを使用して文字列を比較するようにします。

Dim str As String = "ABcDEabcdeあいう"

'先頭からEaを検索し、見つかった位置を取得する
Dim inx1 As Integer = str.IndexOf("EA", StringComparison.OrdinalIgnoreCase)

'末尾からEaを検索し、見つかった位置を取得する
Dim inx2 As Integer = str.LastIndexOf("EA", StringComparison.OrdinalIgnoreCase)

 

IndexOfAny・LastIndexOfAny を使用する方法

IndexOfAny・LastIndexOfAnyは、Char型の配列内に存在する文字のいずれかが、見つかった最初の位置を戻します。

String.IndexOfAny メソッドを使用して、先頭からいくつかの文字検索する

Dim str As String = "ABCDEABCDE12345"
Dim shChar As Char() = {"B"c, "C"c, "D"c}

'先頭から配列中(shChar)のいずれかを検索し、見つかった位置を取得
Dim inx1 As Integer = str.IndexOfAny(shChar)

'3文字目の後から配列中(shChar)のいずれかを検索し、見つかった位置を取得
Dim inx1 As Integer = str.IndexOfAny(shChar, 3)

'1文字目の後からから12文字中で配列中(shChar)のいずれかを検索し、見つかった位置を取得
Dim inx1 As Integer = str.IndexOfAny(shChar, 1, 12)

 

String.LastIndexOfAny メソッドを使用して、末尾からいくつかの文字を検索する

Dim str As String = "ABCDEABCDE12345"
Dim shChar As Char() = {"B"c, "C"c, "D"c}

'末尾から配列中(shChar)のいずれかを検索し、見つかった位置を取得
Dim inx1 As Integer = str.LastIndexOfAny(shChar)

'7文字目の後から配列中(shChar)のいずれかを検索し、見つかった位置を取得
Dim inx1 As Integer = str.LastIndexOfAny(shChar, 7)

'9文字目の後から10文字以内(前に数える)で配列中(shChar)のいずれかを検索し、見つかった位置を取得
Dim inx1 As Integer = str.LastIndexOfAny(shChar, 9, 10)

 

CompareInfo.IndexOf メソッドを使用する方法

CompareInfoクラスのIndexOf・LastIndexOf メソッドを使えば、大文字小文字、全角と半角、ひらがなとカタカナ、など区別しない比較を行うことができます。

Dim str As String = "ABcDEabcdeあいうアイウ"

Dim ci As System.Globalization.CompareInfo = System.Globalization.CultureInfo.CurrentCulture.CompareInfo

'ひらがなとカタカナを区別しない
Dim inx1 As Integer = ci.IndexOf(str, "アイ", System.Globalization.CompareOptions.IgnoreKanaType)

'半角と全角を区別しない
Dim inx2 As Integer = ci.IndexOf(str, "アイ", System.Globalization.CompareOptions.IgnoreWidth)

 

StartsWith・EndsWithにて文字列の先頭・末尾の文字列サーチ

文字列の先頭や末尾に指定文字列があるか調べるだけならば、String.StartsWithメソッド・String.EndsWithメソッドを使うと簡単に比較出来ます。

Dim str As String = "ABcDEabcdeあいうアイウ"

'先頭文字列サーチ
Dim bc1 As Boolean = str.StartsWith("AB")

'末尾文字のサーチ
Dim bc2 As Boolean = str.EndsWith("ウ")

※ IndexOf・ LastIndexOf・ IndexOfAny・ LastIndexOfAnyは開始位置は0から数ます。また検索で見つからなかった場合は-1を返します。

※文字列検索には、ほかに正規表現でも出来ます。