我用C#搞砸了一下,发现了一个非常不舒服的代码:
static void Main(string[] args)
{
string a = "string", b = "string\0";
bool b1 = a == b;
bool b2 = (a.CompareTo(b) > 0);
bool b3 = (a.CompareTo(b) < 0);
bool b4 = (a.CompareTo(b) == 0);
Console.WriteLine(a);
Console.WriteLine(b);
Console.WriteLine("{0} {1} {2} {3}", b1, b2, b3, b4);
}
输出:
string
string
False False False True
预期输出(上):
string
string
True False False True
答案 0 :(得分:8)
CompareTo
的结果并不意味着平等,它与排序顺序有关。我不确定为排序目的忽略空字符太令人惊讶。
字符集包括可忽略的字符。 CompareTo(String)方法在执行区域性敏感比较时不考虑这些字符。
答案 1 :(得分:1)
你想要StringComparison.Ordinal
标志:只是按字典顺序比较字符串:
...
bool b2 = (a.CompareTo(b, StringComparison.Ordinal) > 0);
bool b3 = (a.CompareTo(b, StringComparison.Ordinal) < 0);
bool b4 = (a.CompareTo(b, StringComparison.Ordinal) == 0);
...
答案 2 :(得分:0)
String.CompareTo返回0。这与比较平等有所不同。所以我期待你所描述的结果。