String.Compareメソッドとは異なり、String.IndexOfなど部分文字列の探索と一致を検証するメソッドではStringComparisonを引数にとるオーバーロードは用意されていますが、CompareOptionsをとるオーバーロードは用意されていません。 CompareOptionsを使ってこれらの処理を行うには、CompareInfoクラスのメソッドを使う必要があります。
Stringクラスのメソッド | 代用できるCompareInfoクラスのメソッド |
---|---|
String.IndexOfメソッド | CompareInfo.IndexOfメソッド |
String.LastIndexOfメソッド | CompareInfo.LastIndexOfメソッド |
String.StartsWithメソッド | CompareInfo.IsPrefixメソッド |
String.EndsWithメソッド | CompareInfo.IsSuffixメソッド |
String.Equalsメソッド | (なし) |
なお、これらのメソッドでCompareOptions.StringSortを指定することはできません。 指定した場合はArgumentExceptionがスローされます。
次の例は、CompareInfoクラスの各メソッドを使った部分文字列の探索と一致の例です。
CompareOptionsを指定してIndexOf・LastIndexOf・StartsWith・EndsWithに相当する処理を行う
using System;
using System.Globalization;
class Sample {
static void Main()
{
var s = "かごめかごめ かごのなかのとりは いついつでやる";
var ci = CultureInfo.InvariantCulture.CompareInfo;
Console.WriteLine(s);
Console.WriteLine();
Console.WriteLine("IndexOf(とり、トリ)");
Console.WriteLine(s.IndexOf("とり"));
Console.WriteLine(s.IndexOf("トリ"));
Console.WriteLine(ci.IndexOf(s, "とり"));
Console.WriteLine(ci.IndexOf(s, "とり", CompareOptions.None));
Console.WriteLine(ci.IndexOf(s, "トリ"));
Console.WriteLine(ci.IndexOf(s, "トリ", CompareOptions.IgnoreKanaType));
Console.WriteLine();
Console.WriteLine("LastIndexOf(かご、カゴ)");
Console.WriteLine(s.LastIndexOf("かご"));
Console.WriteLine(s.LastIndexOf("カゴ"));
Console.WriteLine(ci.LastIndexOf(s, "かご"));
Console.WriteLine(ci.LastIndexOf(s, "カゴ"));
Console.WriteLine(ci.LastIndexOf(s, "カゴ", CompareOptions.IgnoreKanaType | CompareOptions.IgnoreWidth));
Console.WriteLine();
Console.WriteLine("IsPrefix(かごめ、かこめ)");
Console.WriteLine(s.StartsWith("かごめ"));
Console.WriteLine(s.StartsWith("かこめ"));
Console.WriteLine(ci.IsPrefix(s, "かごめ"));
Console.WriteLine(ci.IsPrefix(s, "かこめ"));
Console.WriteLine(ci.IsPrefix(s, "かこめ", CompareOptions.IgnoreNonSpace));
Console.WriteLine();
Console.WriteLine("IsSuffix(でやる、デヤル)");
Console.WriteLine(s.EndsWith("でやる"));
Console.WriteLine(s.EndsWith("デヤル"));
Console.WriteLine(ci.IsSuffix(s, "でやる"));
Console.WriteLine(ci.IsSuffix(s, "デヤル"));
Console.WriteLine(ci.IsSuffix(s, "デヤル", CompareOptions.IgnoreKanaType));
}
}
実行結果
かごめかごめ かごのなかのとりは いついつでやる IndexOf(とり、トリ) 13 -1 13 13 -1 13 LastIndexOf(かご、カゴ) 7 -1 7 -1 7 IsPrefix(かごめ、かこめ) True False True False True IsSuffix(でやる、デヤル) True False True False True