c#では、ストレス文字で文字列を処理することがより困難です。次の例を考えてみましょう:
これらの2つの文字列は等しくなければなりませんが、両方のステートメントがfalseを返します。これは、文字のアクセントが異なる文字と見なされるためです。この問題を解決するために、文字列を比較する前に、追加のシンボル(または絡み合った)を削除するテクノロジーを使用できます。
<code class="language-csharp">string s1 = "hello"; string s2 = "héllo"; s1.Equals(s2, StringComparison.InvariantCultureIgnoreCase); s1.Equals(s2, StringComparison.OrdinalIgnoreCase);</code>
以下は、文字列から追加のシンボルを削除する方法です。 このメソッドは、最初に文字列をdフォームに標準化します。これは、ストレスのある文字を持つ複数の文字に分割されます。これらのキャラクターを反復し、非インターバルマーク(つまり、ストレス)をフィルタリングします。最後に、残りの文字を再開して、ストレスせずに文字列を形成します。
この方法を使用するには、比較する前に2つの文字列に適用してください。たとえば、
<code class="language-csharp">static string RemoveDiacritics(string text) { // 将字符串规范化为 Unicode 规范化形式 D string formD = text.Normalize(NormalizationForm.FormD); // 创建一个 StringBuilder 来保存结果字符串 StringBuilder sb = new StringBuilder(); // 迭代规范化字符串中的字符 foreach (char ch in formD) { // 检查字符是否不是非间隔标记 UnicodeCategory uc = CharUnicodeInfo.GetUnicodeCategory(ch); if (uc != UnicodeCategory.NonSpacingMark) { // 将字符附加到 StringBuilder sb.Append(ch); } } // 将 StringBuilder 转换为字符串并将其规范化为 Unicode 规范化形式 C return sb.ToString().Normalize(NormalizationForm.FormC); }</code>
以上がアクセントされた文字を無視しながら、C#の文字列を比較するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。