gpt4 book ai didi

java - 使用compareTo() 对电子邮件地址进行排序会返回意外结果

转载 作者:行者123 更新时间:2023-12-01 07:43:20 40 4
gpt4 key购买 nike

我是 Java 新手,尝试使用 compareTo() 按字母顺序对电子邮件地址进行排序,但结果并不符合我的预期。我把我的问题写在代码中了,你能指教一下吗?

public class SortTest {
public static void main(String[] args) {
String text1= "customer1@example.com";
String text2 = "customer10@example.com";
System.out.println(text1.compareTo(text2)); //Result is 16. Why? I expect a negative number as result.

String text3= "customer1";
String text4 = "customer10";
System.out.println(text3.compareTo(text4)); //result is -1 which is correct.
}

}

更新:我想对上面的 text1 和 text2 进行升序排序,预期结果依次为 "customer1@example.com",然后是 "customer10@example.com"。你能建议如何实现它吗?

最佳答案

看看javadoc :

If there is no index position at which they differ, then the shorter string lexicographically precedes the longer string. In this case, compareTo returns the difference of the lengths of the strings -- that is, the value

这解释了第二个示例。

在第一个中,“0”按字典顺序位于“@”之前。您可以通过运行简单地检查:

"@".compareTo("0")

结果为值16

或者另一种方式:

(int) '@' // 64
(int) '0' // 48

所以差异是 16。

编辑:要按照您想要的方式比较电子邮件,您应该涉及更多逻辑,例如仅比较登录部分(删除由 "@" 分隔的域): str1 .split("@")[0].compareTo(str2.split("@")[0])

关于java - 使用compareTo() 对电子邮件地址进行排序会返回意外结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60826629/

40 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com