[C#] String.EndsWithメソッドの使い方 – 終端文字列を判定する
C#のString.EndsWithメソッドは、文字列が指定したサブ文字列で終わるかどうかを判定するために使用されます。
戻り値はbool型で、指定したサブ文字列で終わる場合はtrue、そうでない場合はfalseを返します。
オプションで大文字・小文字の区別やカルチャに依存した比較を行うことも可能です。
基本的な使い方はstring.EndsWith("サブ文字列")の形式で、引数に判定したい文字列を渡します。
String.EndsWithメソッドの基本的な使い方
C#のString.EndsWithメソッドは、指定した文字列が特定のサブ文字列で終わるかどうかを判定するために使用されます。
このメソッドは、文字列操作において非常に便利な機能を提供します。
文字列が特定のサブ文字列で終わるかを判定する
EndsWithメソッドを使用することで、文字列が特定のサブ文字列で終わるかを簡単に確認できます。
以下はその基本的な使用例です。
using System;
class Program
{
static void Main()
{
string text = "こんにちは世界";
string suffix = "世界"; // 判定するサブ文字列
bool result = text.EndsWith(suffix); // 終端文字列の判定
Console.WriteLine(result); // 結果を出力
}
}Trueこの例では、textが"世界"で終わるため、EndsWithメソッドはtrueを返します。
大文字・小文字を区別しない判定
EndsWithメソッドはデフォルトで大文字・小文字を区別しますが、オプションを指定することで区別しない判定も可能です。
using System;
class Program
{
static void Main()
{
string text = "HelloWorld";
string suffix = "world"; // 判定するサブ文字列(小文字)
bool result = text.EndsWith(suffix, StringComparison.OrdinalIgnoreCase); // 大文字・小文字を無視して判定
Console.WriteLine(result); // 結果を出力
}
}Trueこの例では、StringComparison.OrdinalIgnoreCaseを使用することで、大文字・小文字を無視して判定しています。
カルチャに依存した比較の方法
EndsWithメソッドは、カルチャに依存した比較を行うこともできます。
これにより、特定の言語や地域に基づいた文字列の比較が可能です。
using System;
using System.Globalization;
class Program
{
static void Main()
{
string text = "café"; // アクセント付きの文字
string suffix = "é"; // 判定するサブ文字列
bool result = text.EndsWith(suffix, true, new CultureInfo("fr-FR")); // フランス語のカルチャを指定
Console.WriteLine(result); // 結果を出力
}
}Trueこの例では、フランス語のカルチャを指定して、アクセント付きの文字を正しく判定しています。
StringComparison列挙型を使った比較
StringComparison列挙型を使用することで、さまざまな比較方法を指定できます。
以下はその例です。
using System;
class Program
{
static void Main()
{
string text = "CSharp";
string suffix = "sharp"; // 判定するサブ文字列(小文字)
bool result = text.EndsWith(suffix, StringComparison.CurrentCultureIgnoreCase); // 現在のカルチャを無視して判定
Console.WriteLine(result); // 結果を出力
}
}Trueこの例では、CurrentCultureIgnoreCaseを使用して、現在のカルチャに基づいた大文字・小文字を無視した判定を行っています。
nullや空文字列に対する挙動
EndsWithメソッドは、nullや空文字列に対して特定の挙動を示します。
以下の例を見てみましょう。
using System;
class Program
{
static void Main()
{
string text = "テスト";
// nullを判定
bool result1 = false;
try
{
result1 = text.EndsWith(null);
}
catch (ArgumentNullException)
{
Console.WriteLine("nullを判定するとArgumentNullExceptionが発生します。");
}
// 空文字列を判定
bool result2 = text.EndsWith("");
// 結果を出力
Console.WriteLine(result1); // nullの場合の結果
Console.WriteLine(result2); // 空文字列の場合の結果
}
}nullを判定するとArgumentNullExceptionが発生します。
False
Trueこの例では、nullを判定した場合はArgumentNullExceptionが発生し、空文字列を判定した場合はtrueが返されます。
これは、空文字列はすべての文字列の末尾に存在すると見なされるためです。nullを渡すと例外が発生するため、nullを直接EndsWithメソッドに渡すことは避けるべきです。
String.EndsWithメソッドのオーバーロード
String.EndsWithメソッドには、さまざまなオーバーロードが用意されており、異なる条件で文字列の終端を判定することができます。
これにより、より柔軟な文字列操作が可能になります。
StringComparisonを使用したオーバーロード
StringComparison列挙型を使用することで、大文字・小文字の区別やカルチャに依存した比較を指定できます。
以下はその使用例です。
using System;
class Program
{
static void Main()
{
string text = "CSharp";
string suffix = "sharp"; // 判定するサブ文字列(小文字)
// 大文字・小文字を区別しない判定
bool resultIgnoreCase = text.EndsWith(suffix, StringComparison.OrdinalIgnoreCase);
// 大文字・小文字を区別する判定
bool resultCaseSensitive = text.EndsWith(suffix, StringComparison.Ordinal);
Console.WriteLine(resultIgnoreCase); // 結果を出力
Console.WriteLine(resultCaseSensitive); // 結果を出力
}
}True
Falseこの例では、StringComparison.OrdinalIgnoreCaseを使用して大文字・小文字を無視した判定を行い、StringComparison.Ordinalを使用して大文字・小文字を区別した判定を行っています。
オーバーロードの使い分け
EndsWithメソッドのオーバーロードを使い分けることで、さまざまな条件に応じた文字列の判定が可能になります。
以下のポイントを考慮して使い分けると良いでしょう。
| 使用シーン | 使用するオーバーロード |
|---|---|
| 大文字・小文字を区別したい場合 | EndsWith(string, StringComparison) |
| 大文字・小文字を無視したい場合 | EndsWith(string, StringComparison) |
| 特定のカルチャに基づいた比較が必要な場合 | EndsWith(string, bool, CultureInfo) |
このように、目的に応じて適切なオーバーロードを選択することで、より正確な文字列判定が可能になります。
String.EndsWithメソッドの実践例
String.EndsWithメソッドは、さまざまな実践的なシナリオで活用できます。
以下にいくつかの具体的な例を示します。
ファイル拡張子の判定
ファイル名が特定の拡張子で終わるかどうかを判定するのにEndsWithメソッドを使用できます。
これにより、ファイルの種類を簡単に確認できます。
using System;
class Program
{
static void Main()
{
string fileName = "document.pdf"; // 判定するファイル名
string extension = ".pdf"; // 判定する拡張子
bool isPdf = fileName.EndsWith(extension); // 拡張子の判定
Console.WriteLine(isPdf); // 結果を出力
}
}Trueこの例では、fileNameが.pdfで終わるため、trueが返されます。
URLの末尾を確認する
URLが特定のパスやクエリパラメータで終わるかを確認する際にもEndsWithメソッドが役立ちます。
using System;
class Program
{
static void Main()
{
string url = "https://example.com/products"; // 判定するURL
string path = "/products"; // 判定するパス
bool isProductPage = url.EndsWith(path); // URLの末尾の確認
Console.WriteLine(isProductPage); // 結果を出力
}
}Trueこの例では、urlが"/products"で終わるため、trueが返されます。
特定のフォーマットを持つ文字列の検証
特定のフォーマット(例えば、日付やIDなど)を持つ文字列が正しいかどうかを確認するためにもEndsWithメソッドを使用できます。
using System;
class Program
{
static void Main()
{
string id = "USER-2023-001"; // 判定するID
string format = "-001"; // 判定するフォーマット
bool isValidId = id.EndsWith(format); // フォーマットの検証
Console.WriteLine(isValidId); // 結果を出力
}
}Trueこの例では、idが"-001"で終わるため、trueが返されます。
ユーザー入力の末尾をチェックする
ユーザーからの入力が特定の条件を満たしているかを確認する際にもEndsWithメソッドが役立ちます。
例えば、特定の文字列で終わるかどうかを確認することができます。
using System;
class Program
{
static void Main()
{
Console.Write("ユーザー名を入力してください: ");
string userInput = Console.ReadLine(); // ユーザーからの入力
string requiredSuffix = "user"; // 判定するサブ文字列
bool isValidUserName = userInput.EndsWith(requiredSuffix); // ユーザー名の末尾の確認
Console.WriteLine(isValidUserName); // 結果を出力
}
}ユーザー名を入力してください: testuser
Trueこの例では、ユーザーが"testuser"と入力した場合、trueが返されます。
これにより、ユーザー名が特定の条件を満たしているかを簡単に確認できます。
String.EndsWithメソッドの応用
String.EndsWithメソッドは、さまざまな応用が可能です。
以下に、複数のサブ文字列で終わるかの判定や、正規表現を使った判定、他の文字列メソッドとの組み合わせ、パフォーマンスに関する考慮点について説明します。
複数のサブ文字列で終わるかを判定する方法
EndsWithメソッドは単一のサブ文字列に対してのみ使用できますが、複数のサブ文字列で終わるかを判定するには、ループやLINQを使用することができます。
using System;
using System.Linq;
class Program
{
static void Main()
{
string text = "example.txt"; // 判定する文字列
string[] suffixes = { ".txt", ".doc", ".pdf" }; // 判定するサブ文字列の配列
bool endsWithAny = suffixes.Any(suffix => text.EndsWith(suffix)); // 複数のサブ文字列で終わるかを判定
Console.WriteLine(endsWithAny); // 結果を出力
}
}Trueこの例では、textが.txtで終わるため、trueが返されます。
正規表現を使った終端文字列の判定
正規表現を使用することで、より複雑なパターンに基づいて文字列の終端を判定することができます。
以下はその例です。
using System;
using System.Text.RegularExpressions;
class Program
{
static void Main()
{
string text = "sample123"; // 判定する文字列
string pattern = @"\d+$"; // 数字で終わるかを判定する正規表現
bool matches = Regex.IsMatch(text, pattern); // 正規表現による判定
Console.WriteLine(matches); // 結果を出力
}
}Trueこの例では、textが数字で終わるため、trueが返されます。
String.EndsWithと他の文字列メソッドの組み合わせ
EndsWithメソッドは、他の文字列メソッドと組み合わせて使用することで、より複雑な条件を判定することができます。
例えば、Trimメソッドを使って空白を除去してから判定することができます。
using System;
class Program
{
static void Main()
{
string text = " Hello World "; // 判定する文字列
string suffix = "World"; // 判定するサブ文字列
bool result = text.Trim().EndsWith(suffix); // 空白を除去してから判定
Console.WriteLine(result); // 結果を出力
}
}Trueこの例では、textの前後の空白を除去した後、"World"で終わるかを判定しています。
パフォーマンスを考慮した文字列判定
EndsWithメソッドは、文字列の長さが大きくなるとパフォーマンスに影響を与える可能性があります。
特に、頻繁に呼び出す場合や、大量のデータを処理する場合は注意が必要です。
以下のポイントを考慮すると良いでしょう。
- 文字列の長さを事前に確認: 判定するサブ文字列の長さが、対象の文字列の長さよりも大きい場合は、早期に
falseを返すことができます。 - キャッシュを利用: 同じ文字列に対して何度も判定を行う場合は、結果をキャッシュして再利用することができます。
- 適切なオーバーロードを選択: 大文字・小文字を区別しない判定が必要な場合は、
StringComparison.OrdinalIgnoreCaseを使用することで、パフォーマンスを向上させることができます。
これらの考慮点を踏まえることで、EndsWithメソッドを効率的に使用することができます。
String.EndsWithメソッドの注意点
String.EndsWithメソッドを使用する際には、いくつかの注意点があります。
これらを理解しておくことで、より安全かつ効率的に文字列の判定を行うことができます。
大文字・小文字の区別に関する注意点
EndsWithメソッドはデフォルトで大文字・小文字を区別します。
これにより、意図しない結果を招くことがあります。
例えば、以下のようなケースです。
using System;
class Program
{
static void Main()
{
string text = "HelloWorld";
string suffix = "world"; // 小文字のサブ文字列
bool result = text.EndsWith(suffix); // 大文字・小文字を区別して判定
Console.WriteLine(result); // 結果を出力
}
}Falseこの例では、textが"world"で終わらないため、falseが返されます。
大文字・小文字を無視した判定が必要な場合は、StringComparison.OrdinalIgnoreCaseを使用することをお勧めします。
null参照エラーを防ぐための対策
EndsWithメソッドにnullを渡すと、ArgumentNullExceptionがスローされます。
これを防ぐためには、事前にnullチェックを行うことが必要です。
using System;
class Program
{
static void Main()
{
string text = "sample";
string suffix = null; // nullを判定
// nullチェックを行う
if (suffix != null)
{
bool result = text.EndsWith(suffix);
Console.WriteLine(result); // 結果を出力
}
else
{
Console.WriteLine("サブ文字列はnullです。"); // エラーメッセージを出力
}
}
}サブ文字列はnullです。このように、nullチェックを行うことで、エラーを防ぐことができます。
パフォーマンスに関する注意点
EndsWithメソッドは、文字列の長さが大きくなるとパフォーマンスに影響を与える可能性があります。
特に、頻繁に呼び出す場合や、大量のデータを処理する場合は注意が必要です。
以下のポイントを考慮すると良いでしょう。
- 文字列の長さを事前に確認: 判定するサブ文字列の長さが、対象の文字列の長さよりも大きい場合は、早期に
falseを返すことができます。 - キャッシュを利用: 同じ文字列に対して何度も判定を行う場合は、結果をキャッシュして再利用することができます。
- 適切なオーバーロードを選択: 大文字・小文字を区別しない判定が必要な場合は、
StringComparison.OrdinalIgnoreCaseを使用することで、パフォーマンスを向上させることができます。
これらの注意点を踏まえることで、EndsWithメソッドをより安全かつ効率的に使用することができます。
まとめ
この記事では、C#のString.EndsWithメソッドの基本的な使い方から応用、注意点まで幅広く解説しました。
特に、文字列の終端を判定する際のさまざまな条件やオプションを活用することで、より柔軟な文字列操作が可能になることがわかりました。
今後は、実際のプログラミングにおいてこのメソッドを積極的に活用し、効率的な文字列処理を行ってみてください。