VB.NETで文字列を置換する方法!(Replaceメソッド)

VB.NET

VB.NETで文字列の一部を別の文字列に置換する方法について書いています。
この記事では、VB.NETで文字列を置換するString.Replaceメソッドを中心に、その使い方、注意点、そして関連するテクニックについて解説します。

Replaceメソッドの基本的な使い方

VB.NETで文字列を置換する最も直接的な方法は、StringクラスのReplaceメソッドを使用することです。

構文

Dim originalString As String = "元の文字列"
Dim newString As String = originalString.Replace("検索文字列", "置換文字列")

引数

Replace メソッドには、主に2つのオーバーロード(引数の異なるバージョン)があります。

  1. String.Replace(oldValue As String, newValue As String)
    • oldValue: 置換したい文字列(検索文字列)。
    • newValue: oldValue を置き換える文字列(置換文字列)。
  2. String.Replace(oldChar As Char, newChar As Char)
    • oldChar: 置換したい文字(検索文字)。
    • newChar: oldChar を置き換える文字(置換文字)。

戻り値

Replace メソッドは、置換操作の結果として得られた新しい文字列を返します。
元の文字列は変更されませんString オブジェクトは不変であるため)。

Module ReturnValueExample
    Sub Main()
        Dim original As String = "apple"
        Dim modified As String = original.Replace("p", "x")

        Console.WriteLine($"元の文字列: {original}")   ' 出力: apple
        Console.WriteLine($"変更された文字列: {modified}") ' 出力: axxle
    End Sub
End Module

Replaceメソッドを使ってみる

““vb
Module StringReplaceExample
Sub Main()
Dim sentence As String = “Hello World! This is a World example.”

    ' "World" を "VB.NET" に置換
    Dim newSentence As String = sentence.Replace("World", "VB.NET")

    Console.WriteLine($"元の文字列: ""{sentence}""")
    Console.WriteLine($"置換後の文字列: ""{newSentence}""")
    ' 出力:
    ' 元の文字列: "Hello World! This is a World example."
    ' 置換後の文字列: "Hello VB.NET! This is a VB.NET example."

    ' すべての "p" を "*" に置換
    Dim maskedString As String = "apple".Replace("p", "*")
    Console.WriteLine($"マスクされた文字列: {maskedString}")
    ' 出力: マスクされた文字列: a**le
End Sub

End Module


最初に`sentence`文字列の変数を用意しています。 その次の処理で、文字列の変数から`Replace`を呼び出して、文字列を置換しています。 結果を確認すると、「`World`」から「`VB.NET`」にかわっていることが確認できました。 次の処理では`maskedString`変数に対して、`apple`の`p`を「`*`」にマスクしています。 このように`Replace`メソッドは、検索文字列に一致するすべての出現箇所を置換します。 ## Replaceメソッドの注意点 Replaceメソッドの注意点です。 ### 大文字・小文字を区別する `String.Replace` メソッドは、デフォルトで**大文字・小文字を区別して置換**を行います。 例えば、`"Hello".Replace("h", "X")` は何も置換しません。 ### すべての出現箇所を置換 検索文字列に一致するすべての箇所が置換されます。 特定の1箇所だけを置換したい場合は、別の方法(正規表現など)を検討する必要があります。 ### Nothing(Null) 文字列の扱い `Nothing` の文字列に対して `Replace` を呼び出すと、`NullReferenceException` が発生します。 事前に `Nothing`チェックを行う必要があります。 ```vb Module NullReplaceExample Sub Main() Dim myString As String = Nothing Dim result As String If myString IsNot Nothing Then result = myString.Replace("a", "b") Console.WriteLine(result) Else Console.WriteLine("文字列はNothingです。置換できません。") End If End Sub End Module </code></pre> <code>myString</code>変数に対して、<code>Nothing</code>が入っています。 <code>If</code>文の箇所で、<code>IsNot Nothing</code>とすることで、<code>Nothing</code>じゃない場合の処理をその直下のブロックに書いています。 このようにチェックすることで、エラーが発生しないように処理できます。 <h2>大文字・小文字を区別しない置換</h2> <code>String.Replace</code>メソッドはデフォルトで大文字・小文字を区別します。 大文字・小文字を区別せずに置換したい場合は、いくつかの方法があります。 <h3>方法1: ToLowerまたはToUpperで一時的に変換する</h3> 置換前に文字列全体を一時的に小文字(または大文字)に変換して置換する方法です。。 ```vb.net Module CaseInsensitiveReplace1 Sub Main() Dim text As String = "Apple, apple, APPLE" Dim searchText As String = "apple" Dim replaceText As String = "Orange"
    Dim result As String = text.ToLower().Replace(searchText, replaceText)
    Console.WriteLine($"大文字・小文字を無視した置換 (ToLower): {result}")
    ' 出力: Orange, Orange, Orange (元のAppleがOrangeになる)    
End Sub

End Module


`text`変数に大文字・小文字それぞれの「`apple`」が入っています。 `Replace`前の処理で、`ToLower`メソッドを使うことによって、全ての文字列を小文字して「`apple`」から「`Orange`」に変換しています。 ### 方法2: 正規表現 (`Regex.Replace`) を使用する `System.Text.RegularExpressions.Regex`クラスの`Replace`メソッドを使用し、`RegexOptions.IgnoreCase` オプションを指定します。 ```vb Imports System.Text.RegularExpressions Module CaseInsensitiveReplace2 Sub Main() Dim text As String = "Apple, apple, APPLE" Dim searchText As String = "apple" Dim replaceText As String = "Orange" ' 正規表現で大文字・小文字を無視して置換 Dim pattern As String = Regex.Escape(searchText) ' 検索文字列を正規表現パターンとしてエスケープ Dim result As String = Regex.Replace(text, pattern, replaceText, RegexOptions.IgnoreCase) Console.WriteLine($"正規表現による大文字・小文字を無視した置換: {result}") ' 出力: Orange, Orange, Orange End Sub End Module

Regex.ReplaceRegexOptions.IgnoreCaseオプションを使うことで大文字・小文字を無視して置換します。
正規表現は、より複雑なパターンマッチングや、最初の1回だけ置換するなどの高度な操作も可能です。

複数の文字列を置換する方法

String.Replace は一度に1つの検索文字列しか置換できません。
複数の異なる文字列を置換したい場合は、いくつかの方法があります。

方法1: Replaceメソッドを連続して呼び出す

最も単純な方法ですが、置換の順序に注意が必要です。

Module MultipleReplace1
    Sub Main()
        Dim text As String = "Hello World! This is a test."

        ' 1. "World" を "Universe" に置換
        Dim result As String = text.Replace("World", "Universe")
        ' 2. "test" を "example" に置換
        result = result.Replace("test", "example")

        Console.WriteLine($"複数の置換 (連続呼び出し): {result}")
        ' 出力: Hello Universe! This is a example.
    End Sub
End Module

text変数の文字列を変換した後に、返ってきた変数に対して、さらに置換をしています。

方法2: ループ処理で置換ペアを適用する

置換したいペアが多い場合に便利です。

Module MultipleReplace2
    Sub Main()
        Dim text As String = "Product Code: P-001, Status: Pending"
        Dim replacements As New Dictionary(Of String, String) From {
            {"P-001", "A-123"},
            {"Pending", "Completed"}
        }

        Dim result As String = text
        For Each entry In replacements
            result = result.Replace(entry.Key, entry.Value)
        Next

        Console.WriteLine($"複数の置換 (ループ): {result}")
        ' 出力: Product Code: A-123, Status: Completed
    End Sub
End Module

Dictionaryで作ったreplacements変数をFor Eachでループして、キーと値を使って置換しています。
置換したいペアが多い場合にスッキリまとめることができます。

まとめ

VB.NETで文字列を置換する最も基本的な方法は String.Replace メソッドです。
これは、検索文字列に一致するすべての出現箇所を大文字・小文字を区別して置換し、新しい文字列を返します。

大文字・小文字を区別しない置換や、より複雑なパターンマッチングが必要な場合は、System.Text.RegularExpressions.Regex.Replace メソッドが非常に強力です。
これらのメソッドを適切に使い分けることで、VB.NETアプリケーションにおける文字列操作を効率的かつ堅牢に行うことができます。

コメント