[C#] String.EndsWithメソッドの使い方 – 終端文字列を判定する

C#のString.EndsWithメソッドは、文字列が指定したサブ文字列で終わるかどうかを判定するために使用されます。

戻り値はbool型で、指定したサブ文字列で終わる場合はtrue、そうでない場合はfalseを返します。

オプションで大文字・小文字の区別やカルチャに依存した比較を行うことも可能です。

基本的な使い方はstring.EndsWith("サブ文字列")の形式で、引数に判定したい文字列を渡します。

この記事でわかること
  • 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メソッドをより安全かつ効率的に使用することができます。

よくある質問

String.EndsWithとString.StartsWithの違いは?

String.EndsWithメソッドは、指定した文字列が特定のサブ文字列で「終わる」かどうかを判定します。

一方、String.StartsWithメソッドは、指定した文字列が特定のサブ文字列で「始まる」かどうかを判定します。

具体的には、以下のように使われます。

  • EndsWith: 文字列の末尾を確認する。
  • StartsWith: 文字列の先頭を確認する。

例えば、"HelloWorld".EndsWith("World")trueを返しますが、"HelloWorld".StartsWith("World")falseを返します。

String.EndsWithで大文字・小文字を無視するにはどうすればいい?

String.EndsWithメソッドで大文字・小文字を無視して判定するには、StringComparison列挙型を使用します。

具体的には、StringComparison.OrdinalIgnoreCaseを指定することで、大文字・小文字を無視した比較が可能です。

以下はその例です。

string text = "HelloWorld";
string suffix = "world"; // 小文字のサブ文字列
bool result = text.EndsWith(suffix, StringComparison.OrdinalIgnoreCase); // 大文字・小文字を無視して判定

この場合、resulttrueになります。

String.EndsWithで複数の条件を判定する方法は?

String.EndsWithメソッドは単一のサブ文字列に対してのみ使用できますが、複数の条件を判定するには、ループやLINQを使用することができます。

以下はLINQを使った例です。

string text = "example.txt"; // 判定する文字列
string[] suffixes = { ".txt", ".doc", ".pdf" }; // 判定するサブ文字列の配列
bool endsWithAny = suffixes.Any(suffix => text.EndsWith(suffix)); // 複数のサブ文字列で終わるかを判定

この場合、endsWithAnytrueになります。

これにより、複数の条件を簡単に判定することができます。

まとめ

この記事では、C#のString.EndsWithメソッドの基本的な使い方から応用、注意点まで幅広く解説しました。

特に、文字列の終端を判定する際のさまざまな条件やオプションを活用することで、より柔軟な文字列操作が可能になることがわかりました。

今後は、実際のプログラミングにおいてこのメソッドを積極的に活用し、効率的な文字列処理を行ってみてください。

  • URLをコピーしました!
目次から探す