2

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

このジョブを作成するために特別なフレームワーク (NHibernate、Castle) を使用しています。私の問題はそれです。アパートや部屋などを検索できるウェブサイトがあります。これらのウェブサイトのユーザーのほとんどはトルコ人です。だから私の問題はここから始まります。

たとえば、Beşiktaş (地区名) という単語を検索する場合、この Besiktas のように検索できます。ご覧のとおり、トルコ語にはいくつかの特殊文字 (S、Ş Ö O、Ğ G、Ç C、İ I、Ü U ) があり、人々はそれらの両方を使用している可能性があります。このようにすべての条件を検索する必要があります。たとえば、彼らが Beşiktaş を検索しようとすると、「Besiktaş、Beşiktaş、Besiktas Beşiktas」のようなすべてのバリアントを検索する必要があり、この操作の後、重複したオブジェクトをリストから削除する必要があります。どうすればこの夢を実現できますか:)

この操作のアルゴリズムが必要です。

私の貧弱な英語力で申し訳ありません。ありがとうございました

4

1 に答える 1

0

これを行うために活用できる CultureInfo と呼ばれるものを調べる必要があります。これは、アクセント付きの文字を無視することに関して他の誰かが尋ねた同様の質問です。これは、あなたがやりたいこととほとんど同じです。これは、アクセント付き文字を無視して文字列を比較する回答として投稿され、受け入れられた方法です。

string s1 = "hello";
string s2 = "héllo";

if (String.Compare(s1, s2, CultureInfo.CurrentCulture, CompareOptions.IgnoreNonSpace) == 0)
{
    // both strings are equal
}

これを使用する場合、地区をアクセント記号のない英語名として保存し、データベースに対してクエリを実行する前に文字列を比較します。そうすれば、ユーザーがアクセント付きの文字と英語の名前を使用できるようになります。

CultureInfoに関する MSDN 記事へのリンクは次のとおりです。

于 2012-11-20T09:08:15.940 に答える