2

解決済み:

次のコードを使用しました。

var compareinfo = CultureInfo.CurrentCulture.CompareInfo;
var index = compareinfo.IndexOf(strA, strB, CompareOptions.IgnoreNonSpace | CompareOptions.IgnoreCase);
return index > -1;

重複の可能性:
文字列比較でアクセント付き文字を無視する

ユーザーが関心のある場所を検索するために使用するパブリック キオスク アプリケーションがあります。カフェという言葉を使った店名があるとします。キオスクでは、オンスクリーン キーボードから英語のアルファベットのみを入力できます。問題は、Cafe (アクセント付きの é なし) と入力すると、ユーザーが文字 é を入力できなかったため、検索が無効になることです。アプリケーションで、通常の e をアクセント付きのすべての e に対して検索可能にし、他のすべてのそれぞれの文字に対しても同様に検索できるようにしたいと考えています。どうやってやるの?

編集: 店名は「Bruce Café」で、「cafe」を検索すると、検索結果に表示されるはずです。

使用して

string.Compare("Bruce Café", "cafe", CultureInfo.CurrentCulture, CompareOptions.IgnoreCase | CompareOptions.IgnoreNonSpace)

-1 を返します

string.Compare("Ben-Gurion University (BGU)", "cafe", CultureInfo.CurrentCulture, CompareOptions.IgnoreCase | CompareOptions.IgnoreNonSpace)

-1も返します

なぜそうなのかはわかりません...

4

2 に答える 2

1

コードでこれを行う場合:

string.Compare(s1, s2, CultureInfo.CurrentCulture, CompareOptions.IgnoreNonSpace);

T-SQL でこれを実行している場合は、次のようになります。

SELECT *
FROM YourTable
WHERE
   ColumnName COLLATE Latin1_general_CI_AI Like '%cafe%' COLLATE Latin1_general_CI_AI
于 2012-11-12T09:02:37.397 に答える
1

独自の文字列比較を行う場合は、CompareOptions パラメータを受け入れる文字列比較メソッドの 1 つにCompareOptions.IgnoreNonSpaceを指定することで、アクセントを無視できます。たとえば、この String.Compareです。

于 2012-11-12T09:03:07.297 に答える