はじめに
C#は、強力な文字列操作機能を提供するプログラミング言語です。文字列の検索、置換、分割、結合など、さまざまな操作を簡単に行うことができます。本記事では、文字列操作の基本として、特に文字列の検索方法に焦点を当てて解説します。文字列操作は多くのプログラムで必要となる基本的なスキルですので、しっかりとマスターしましょう。
文字列の基本操作
まずは、文字列の基本操作について簡単に説明します。C#では、文字列はstring型として扱われ、さまざまなメソッドを使用して操作することができます。
文字列の連結
文字列の連結は、+演算子やString.Concatメソッドを使用して行います。
string str1 = "Hello";
string str2 = "World";
string result = str1 + " " + str2; // "Hello World"
String.Concatメソッドを使用する例も見てみましょう。
string str1 = "Hello";
string str2 = "World";
string result = String.Concat(str1, " ", str2); // "Hello World"
文字列の分割
文字列を特定の文字で分割するには、String.Splitメソッドを使用します。
string str = "apple,banana,cherry";
string[] fruits = str.Split(','); // {"apple", "banana", "cherry"}
文字列の置換
文字列中の特定の部分を別の文字列に置換するには、String.Replaceメソッドを使用します。
string str = "Hello World";
string result = str.Replace("World", "C#"); // "Hello C#"
文字列の検索
文字列の検索は、特定の文字列が含まれているかを確認するために使用されます。C#では、IndexOfやContains、StartsWith、EndsWithなどのメソッドを使用して文字列を検索することができます。
部分文字列の検索
IndexOfメソッドは、特定の文字列が最初に出現する位置を返します。見つからない場合は-1を返します。
string str = "Hello World";
int index = str.IndexOf("World"); // 6
文字列の存在確認
Containsメソッドは、特定の文字列が含まれているかどうかを確認します。ブール値を返します。
string str = "Hello World";
bool contains = str.Contains("World"); // true
文字列の開始位置の確認
StartsWithメソッドは、文字列が特定の文字列で始まるかどうかを確認します。
string str = "Hello World";
bool startsWith = str.StartsWith("Hello"); // true
文字列の終了位置の確認
EndsWithメソッドは、文字列が特定の文字列で終わるかどうかを確認します。
string str = "Hello World";
bool endsWith = str.EndsWith("World"); // true
正規表現による高度な検索
C#では、正規表現を使用して高度な文字列検索を行うことができます。正規表現は、複雑なパターンマッチングを可能にする強力なツールです。
正規表現の基本
C#では、System.Text.RegularExpressions名前空間を使用して正規表現を扱います。基本的な使用例を見てみましょう。
using System;
using System.Text.RegularExpressions;
class Program
{
static void Main()
{
string pattern = @"\d+";
string input = "There are 123 apples and 456 oranges.";
MatchCollection matches = Regex.Matches(input, pattern);
foreach (Match match in matches)
{
Console.WriteLine(match.Value); // 123, 456
}
}
}
この例では、\d+というパターンを使用して、入力文字列中のすべての数字を検索します。
正規表現で部分文字列を抽出
正規表現を使用して、特定のパターンに一致する部分文字列を抽出することも可能です。
using System;
using System.Text.RegularExpressions;
class Program
{
static void Main()
{
string pattern = @"\b\w{5}\b";
string input = "These are some words with five letters.";
MatchCollection matches = Regex.Matches(input, pattern);
foreach (Match match in matches)
{
Console.WriteLine(match.Value); // words
}
}
}
この例では、5文字の単語を検索して抽出しています。
応用例:ログファイルの解析
文字列検索の実際の応用例として、ログファイルの解析を考えてみましょう。以下に、ログファイルから特定のエラーメッセージを検索して表示するプログラムの例を示します。
using System;
using System.IO;
using System.Text.RegularExpressions;
class Program
{
static void Main()
{
string logFilePath = @"C:\example\logfile.txt";
string pattern = @"ERROR:.*";
using (StreamReader reader = new StreamReader(logFilePath))
{
string line;
while ((line = reader.ReadLine()) != null)
{
if (Regex.IsMatch(line, pattern))
{
Console.WriteLine(line);
}
}
}
}
}
このプログラムは、ログファイルから「ERROR:」で始まる行を検索し、コンソールに表示します。
文字列操作のパフォーマンス
文字列操作においては、パフォーマンスも重要な要素です。特に、大量の文字列操作を行う場合、StringBuilderクラスを使用すると効率が向上します。
StringBuilderの使用例
using System;
using System.Text;
class Program
{
static void Main()
{
StringBuilder sb = new StringBuilder();
sb.Append("Hello");
sb.Append(" ");
sb.Append("World");
string result = sb.ToString(); // "Hello World"
Console.WriteLine(result);
}
}
StringBuilderは、連結操作を効率的に行うためのクラスです。文字列の追加や変更を頻繁に行う場合に適しています。
まとめ
本記事では、C#における文字列操作の基本について解説しました。文字列の連結、分割、置換、検索などの基本操作から、正規表現を使用した高度な検索方法まで、さまざまな手法を具体的なコード例とともに紹介しました。これらの技術をマスターすることで、より効率的に文字列を操作することができるようになります。C#の文字列操作は多くのアプリケーションで必要となる基本的なスキルですので、ぜひ今回の記事を参考に実践してみてください。

