C# 代码:
public class Test
{
public static void Main()
{
List<string> list = new List<string> { "johnsmith@mail.com", "john_newyork@mail.com", "john00@mail.com" };
list.Sort();
for(int i=0;i<list.Count;i++){
Console.WriteLine(list[i]);
}
}
}
结果:
john_newyork@mail.com
john00@mail.com
johnsmith@mail.com
Java 代码:
class Ideone
{
public static void main (String[] args) throws java.lang.Exception
{
List<String> list = new ArrayList<String>();
list.add("johnsmith@mail.com");
list.add("john_newyork@mail.com");
list.add("john00@mail.com");
Collections.sort(list);
System.out.println(list);
}
}
结果:
[john00@mail.com、john_newyork@mail.com、johnsmith@mail.com]
“_”的 Ascii 值为 95,“0”的 Ascii 值为 48。因此,在字符串排序中,理想情况下“0”应位于“_”之前。为什么 C# 排序将“_”放在“0”之前?
但是当我尝试比较字符“_”和“0”时。两种语言都可以正确比较,并在“_”之前保留“0”。
Console.WriteLine('0'>'_'); -> False (C#)
System.out.println('0'>'_'); -> false (Java)
最佳答案
要按 ASCII 值排序,请使用 StringComparer.Ordinal
list.Sort(StringComparer.Ordinal);
关于java - C# Sort 与 Java Collections.Sort 给出不同的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59015922/