如果将a与á进行比较,我怎么能得到真假?

Ron*_*ano 6 c# string

我正在研究string.Normalize()method,我认为如果它们使用不同的unicode,它可用于比较字符串相等性。

到目前为止,这是我所做的。这string.Equals()不是我应该在这里使用的吗?

        string stra = "á";
        string straNorm = stra.Normalize();
        string strFormC = stra.Normalize(NormalizationForm.FormC);
        string strFormD = stra.Normalize(NormalizationForm.FormD);
        string strFormKC = stra.Normalize(NormalizationForm.FormKC);
        string strFormKD = stra.Normalize(NormalizationForm.FormKD);
        Console.WriteLine("norm {0}",straNorm);
        Console.WriteLine("C {0}", strFormC);
        Console.WriteLine("D {0}", strFormD);
        Console.WriteLine("KC {0}", strFormKC);
        Console.WriteLine("KD {0}", strFormKD);

        Console.WriteLine("a".Equals(stra)); //false
        Console.WriteLine("a".Equals(straNorm)); //false
        Console.WriteLine("a".Equals(stra.Normalize())); //false
        Console.WriteLine("a".Equals(strFormC)); //false
        Console.WriteLine("a".Equals(strFormKC)); //false
        Console.WriteLine("a".Equals(strFormKD)); //false
Run Code Online (Sandbox Code Playgroud)

Ade*_*ias 10

您可以使用string.Compare()设置CultureInfo.InvariantCultureCompareOptions.IgnoreNonSpace如下所示,我创建了一个名为的方法CompareStrings(string str1, string str2),它将返回一个boolean

public bool CompareStrings(string str1, string str2)
{
    return string.Compare(str1, str2, CultureInfo.InvariantCulture, CompareOptions.IgnoreNonSpace) == 0; 
}
Run Code Online (Sandbox Code Playgroud)

调用比较字符串的方法:

Console.WriteLine(CompareStrings("a", "á"));
Console.WriteLine(CompareStrings("a", "a"));
Console.WriteLine(CompareStrings("a", "b"));
Run Code Online (Sandbox Code Playgroud)

结果:

True
True
False

CompareOptions.IgnoreNonSpace定义:它“表示该字符串比较必须忽略非间距组合字符,如音调符号的Unicode标准定义的字符作为与基础字符组合,以产生一个新的字符的字符相结合非间距组合字符不要被占据的间隔位置。呈现时本身。”

你可以找到更多关于CompareOptions文档


Ale*_*rov 5

在以D和KD格式规范化之后,该字符串将包含两个字符:一个字母和一个变音符。有必要与字母进行比较。

string stra = "á";

string strFormC = stra.Normalize(NormalizationForm.FormC);
string strFormD = stra.Normalize(NormalizationForm.FormD);
string strFormKC = stra.Normalize(NormalizationForm.FormKC);
string strFormKD = stra.Normalize(NormalizationForm.FormKD);

Console.WriteLine("C {0}", strFormC.Length); // 1
Console.WriteLine("D {0}", strFormD.Length); // 2
Console.WriteLine("KC {0}", strFormKC.Length); // 1
Console.WriteLine("KD {0}", strFormKD.Length); // 2

Console.WriteLine("a".Equals(strFormD[0].ToString())); // True
Console.WriteLine("a".Equals(strFormKD[0].ToString())); // True
Run Code Online (Sandbox Code Playgroud)

我们可以使用正则表达式删除所有变音字符。

\p{M}-是Unicode类别表示所有变音符号。

string stra = "á";

string strFormD = stra.Normalize(NormalizationForm.FormD);

var result = Regex.Replace(strFormD, @"\p{M}", string.Empty);

Console.WriteLine("a".Equals(result)); // True
Console.WriteLine("a" == result); // True
Run Code Online (Sandbox Code Playgroud)