知ってると、ちょっと便利かもしれないTips。メモメモ。
前回の記事で、CompareOptions.IgnoreKanaTypeのケースを記述しているので、こちらもご参照ください。
- ひらがなとカタカナの違いを無視して文字列比較 (string.Compare, CultureInfo, CompareInfo, CompareOptions, IgnoreKanaType)
System.Stringには、静的なCompareメソッドが存在しますが
このメソッドには、いくつかのオーバーロードが存在します。
そのうちの一つに、CultureInfoとCompareOptionsを引数にとるオーバーロード
があり、指定するCompareOptionsの値によって、いろいろな比較方法を指定できます。
で、このCompareOptionsには
CompareOptions.IgnoreWidth
という値があり、これを指定すると
全角と半角の違いを無視して文字列比較
が行われます。
また、複数の条件を結合する場合はORで結合できます。
なので、
(CompareOptions.IgnoreKanaType | CompareOptions.IgnoreWidth)
とすると、
ひらがなとカタカナの違いを無視し、且つ、全角と半角の違いを無視して文字列比較
となります。
以下、サンプルです。
using System.Globalization; #region CompareOptionsSamples-02 /// <summary> /// CompareOptions列挙型のサンプルです。 /// </summary> public class CompareOptionsSamples02 : IExecutable { public void Execute() { // // string.Compareメソッドには、CultureInfoとCompareOptionsを // 引数にとるオーバーロードが定義されている。(他にもオーバーロードメソッドが存在します。) // // このオーバーロードを利用する際、CompareOptions.IgnoreKanaTypeを指定すると // 「ひらがな」と「カタカナ」の違いを無視して、文字列比較を行う事が出来る。 // // さらに、CompareOptionsには、IgnoreWidthという値も存在し // これを指定すると、全角と半角の違いを無視して、文字列比較を行う事が出来る。 // string ja1 = "ハローワールド"; string ja2 = "ハローワールド"; string ja3 = "はろーわーるど"; CultureInfo ci = new CultureInfo("ja-JP"); // 全角半角の違いを無視して、「ハローワールド」と「ハローワールド」を比較 Console.WriteLine("{0}", string.Compare(ja1, ja2, ci, CompareOptions.IgnoreWidth).ToStringResult()); // 全角半角の違いを無視して、「はろーわーるど」と「ハローワールド」を比較 Console.WriteLine("{0}", string.Compare(ja3, ja2, ci, CompareOptions.IgnoreWidth).ToStringResult()); // 全角半角の違いを無視し、且つ、ひらがなとカタカナの違いを無視して、「はろーわーるど」と「ハローワールド」を比較 Console.WriteLine("{0}", string.Compare(ja3, ja2, ci, (CompareOptions.IgnoreWidth | CompareOptions.IgnoreKanaType)).ToStringResult()); } } #endregion
上記のサンプルでは、「はろーわーるど」と「ハローワールド」と「ハローワールド」の3つの文字列をstring.Compareメソッドで比較しています。
結果は、以下のようになります。
等しい 大きい 等しい
IgnoreWidthを指定した場合、同じ文字列として判定されています。
================================
過去の記事については、以下のページからご参照下さい。
- いろいろ備忘録日記まとめ