知ってると、ちょっと便利かもしれないTips。メモメモ。
System.Stringには、静的なCompareメソッドが存在しますが
このメソッドには、いくつかのオーバーロードが存在します。
そのうちの一つに、CultureInfoとCompareOptionsを引数にとるオーバーロード
があり、指定するCompareOptionsの値によって、いろいろな比較方法を指定できます。
で、このCompareOptionsには
CompareOptions.IgnoreKanaType
という値があり、これを指定すると
ひらがなとカタカナの違いを無視して文字列比較
が行われます。
以下、サンプルです。
using System.Globalization; #region CompareOptionsSamples-01 /// <summary> /// 比較メソッドの結果値を変換するためのヘルパークラス. /// </summary> public static class CompareResultHelper { static readonly string[] CompResults = { "小さい", "等しい", "大きい" }; // 比較結果の数値を文字列に変換. public static string ToStringResult(this int self) { return CompResults[self + 1]; } } /// <summary> /// CompareOptions列挙型のサンプルです。 /// </summary> public class CompareOptionsSamples01 : IExecutable { public void Execute() { // // string.Compareメソッドには、CultureInfoとCompareOptionsを // 引数にとるオーバーロードが定義されている。(他にもオーバーロードメソッドが存在します。) // // このオーバーロードを利用する際、CompareOptions.IgnoreKanaTypeを指定すると // 「ひらがな」と「カタカナ」の違いを無視して、文字列比較を行う事が出来る。 // string ja1 = "はろーわーるど"; string ja2 = "ハローワールド"; CultureInfo ci = new CultureInfo("ja-JP"); // 標準の比較方法で比較 Console.WriteLine("{0}", string.Compare(ja1, ja2, ci, CompareOptions.None).ToStringResult()); // 大文字小文字を無視して比較. Console.WriteLine("{0}", string.Compare(ja1, ja2, ci, CompareOptions.IgnoreCase).ToStringResult()); // ひらがなとカタカナの違いを無視して比較 // つまり、「はろーわーるど」と「ハローワールド」を同じ文字列として比較 Console.WriteLine("{0}", string.Compare(ja1, ja2, ci, CompareOptions.IgnoreKanaType).ToStringResult()); // // string.Compareメソッドは、内部でCutureInfoから、そのカルチャーに紐づく // CompareInfoを取り出して、比較処理を行っているので、自前で直接CompareInfoを // 用意して、Compareメソッドを呼び出しても同じ結果となる。 // CompareInfo compInfo = CompareInfo.GetCompareInfo("ja-JP"); Console.WriteLine("{0}", compInfo.Compare(ja1, ja2, CompareOptions.IgnoreKanaType).ToStringResult()); } } #endregion
上記のサンプルでは、「はろーわーるど」と「ハローワールド」の2つの文字列をstring.Compareメソッドで比較しています。
結果は、以下のようになります。
大きい 大きい 等しい 等しい
IgnoreKanaTypeを指定した場合、同じ文字列として判定されています。
================================
過去の記事については、以下のページからご参照下さい。
- いろいろ備忘録日記まとめ