文字列処理

[VB.NET] 文字列から特定の文字列を検索する方法

今回は、VB.NETで文字列から特定の文字列を検索する方法についてご紹介します。

文字列検索の概要

VB.NETでは、文字列検索にさまざまな方法があります。String.ContainsString.IndexOfInStrRegexなど、用途や求める柔軟性に応じて使い分けることが可能です。ここでは、代表的な手法の概要と、実際のコード例を順を追って確認していきます。

よく使われる文字列検索メソッド

String.Contains メソッド

String.Containsは、指定した部分文字列が含まれているかをTrueまたはFalseで返します。単純な検索に適しており、検索結果をすぐに判定したい場合に便利です。

実行結果

指定した文字列が見つかりました。

このメソッドは大文字と小文字を区別する点に注意してください。大文字小文字を区別しない検索を行いたい場合は、後述のString.IndexOfでオーバーロードを指定するなどの方法を検討します。

String.IndexOf メソッド

String.IndexOfは、部分文字列が最初に現れる位置を返します。インデックスが0から始まり、見つからない場合は-1を返すため、検索結果を詳細に扱いたい場面に向いています。

実行結果

「IndexOf」は位置 8 にあります。

String.IndexOfには、文字列比較の方法を指定するためのオーバーロードがあります。StringComparison.OrdinalIgnoreCaseを指定すれば大文字小文字を区別しない検索が可能です。

また、部分文字列が複数回出現する場合は、検索後のインデックスから再度検索を行うことで、複数の箇所を探すことができます。

InStr 関数

InStr関数は、VB6との互換性を保つために用意されています。文字列内の部分文字列の位置を1から数え、見つからない場合は0を返します。

実行結果

「検索位置」は位置 9 にあります。

新規開発ではIndexOfが一般的ですが、レガシーコードを扱う際にはInStrが使われている場面に遭遇することもあります。互換性が求められるケースでは覚えておくと便利です。

正規表現(Regex)を使った検索

Regexを用いると、ワイルドカードや特殊文字を使った複雑な検索が可能です。ただし、パフォーマンスに影響を与えることがあるため、必要な場面でのみ活用することが推奨されます。

実行結果

正規表現により、パターンが見つかりました。開始位置:5

Regexは柔軟性が高い反面、パターンの設計やオプションの指定次第で可読性や処理速度が変わります。大文字小文字を区別しない場合はRegexOptions.IgnoreCaseを指定するなど、プロジェクトの要件に合わせて活用します。

実用的な活用例

たとえばログファイルを解析する際に、特定のキーワードを含む行を抽出するケースがあります。その場合はString.Containsで条件分岐し、見つかった行だけをリストに追加するといった実装を行います。

実行結果

[ERROR] : システム障害が発生しました
[ERROR] : ユーザー認証に失敗しました

簡単な文字列検索からログ解析まで、用途に合った検索メソッドを選び、可読性や性能を考慮しながら実装すると、維持管理しやすいコードを作れます。

まとめ

VB.NETには、単純な検索から複雑なパターンマッチングまで、豊富な文字列検索手法が用意されています。

目的に応じたメソッドを選択し、検索精度や性能を最適化してください。

大文字小文字の区別や国際化への対応も考慮すると、より使いやすいアプリケーションを構築できます。