文字列の「前方一致」と「後方一致」
C#で文字列データを処理する際、「特定の文字列が “https” で始まっているか」や、「ファイル名が “.csv” で終わっているか」といった、文字列の先頭(前方)または末尾(後方)が特定のパターンと一致するかを判定したいケースは非常に一般的です。
このために、stringクラスにはStartsWithメソッドとEndsWithメソッドが標準で用意されています。この記事では、これらのメソッドの基本的な使い方と、大文字・小文字を区別せずに判定する方法について解説します。
StartsWith:文字列の開始を判定
StartsWithメソッドは、対象の文字列が、引数で指定した部分文字列で開始しているかどうかを bool 値(true または false)で返します。
デフォルトでは、大文字と小文字は厳密に区別されます。
StartsWith のコード例
URLが安全なプロトコル(https://)で始まっているかを確認する例です。
using System;
public class StartsWithExample
{
public static void Main()
{
string websiteUrl = "https://example.com";
string prefix = "https://";
// "https://" で始まっているか (true)
if (websiteUrl.StartsWith(prefix))
{
Console.WriteLine($"'{websiteUrl}' は '{prefix}' で始まっています。");
}
else
{
Console.WriteLine($"'{websiteUrl}' は '{prefix}' で始まっていません。");
}
// 大文字・小文字を区別するため、小文字の "http://" は false になる
string insecurePrefix = "http://";
if (websiteUrl.StartsWith(insecurePrefix))
{
Console.WriteLine("安全でない可能性があります。");
}
}
}
出力結果:
'https://example.com' は 'https://' で始まっています。
EndsWith:文字列の終了を判定
EndsWithメソッドは、対象の文字列が、引数で指定した部分文字列で終了しているかどうかを bool 値で返します。
こちらもStartsWithと同様に、デフォルトでは大文字と小文字を厳密に区別します。
EndsWith のコード例
アップロードされたファイル名が、許可された拡張子(.png)であるかを確認する例です。
using System;
public class EndsWithExample
{
public static void Main()
{
string fileName = "Report_2025_Final.pdf";
string validExtension = ".pdf";
// ".pdf" で終わっているか (true)
if (fileName.EndsWith(validExtension))
{
Console.WriteLine($"'{fileName}' は有効な拡張子 '{validExtension}' を持っています。");
}
else
{
Console.WriteLine($"'{fileName}' は無効な拡張子です。");
}
// 大文字・小文字を区別するため、".PDF" (大文字) は false になる
if (fileName.EndsWith(".PDF"))
{
// このブロックは実行されない
}
}
}
出力結果:
'Report_2025_Final.pdf' は有効な拡張子 '.pdf' を持っています。
応用: 大文字・小文字を区別せずに判定する
StartsWithとEndsWithのどちらのメソッドにも、StringComparison列挙型を引数として渡せるオーバーロード(引数が異なる同名メソッド)が用意されています。
これにより、大文字・小文字を無視した判定が可能になります。
StringComparison.OrdinalIgnoreCase: 大文字・小文字の区別を無視して比較する際の、高速で標準的な方法です。
コード例(大文字・小文字を無視)
ファイル拡張子が大文字の .JPG であっても、小文字の .jpg であっても受け入れたい場合の EndsWith の例です。
using System;
public class IgnoreCaseExample
{
public static void Main()
{
string imageFile = "Photo_IMG_123.JPG"; // 拡張子が大文字
string extension = ".jpg"; // 判定は小文字
// 比較ルール: 大文字・小文字を無視
StringComparison comparisonRule = StringComparison.OrdinalIgnoreCase;
// EndsWith に比較ルールを指定
if (imageFile.EndsWith(extension, comparisonRule))
{
Console.WriteLine($"'{imageFile}' は {extension} (大文字小文字無視) で終わっています。");
}
else
{
Console.WriteLine("無効なファイルです。");
}
}
}
出力結果:
'Photo_IMG_123.JPG' は .jpg (大文字小文字無視) で終わっています。
この方法は StartsWith でも同様に使用でき、http:// と HTTPS:// の両方を柔軟に判定できます。
まとめ
StartsWithとEndsWithは、C#で文字列のプレフィックス(接頭辞)とサフィックス(接尾辞)を判定するための基本的なメソッドです。
str.StartsWith(prefix):prefixで始まるか(大文字・小文字を区別)。str.EndsWith(suffix):suffixで終わるか(大文字・小文字を区別)。
大文字・小文字を無視したい場合は、StringComparison.OrdinalIgnoreCase を引数として渡すことで、より柔軟な判定を行うことができます。
