我是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"
。您能建议如何实现吗?
答案 0 :(得分:3)
看看javadoc:
如果没有索引位置在它们之间有所不同,则较短的字符串在字典上在较长的字符串之前。在这种情况下,compareTo返回字符串长度的差-即值
这说明了第二个示例。
在字典中,第一个“ 0”在“ @”之前。您可以通过运行以下命令进行简单检查:
"@".compareTo("0")
其结果为值16
。
或者另一种方式:
(int) '@' // 64
(int) '0' // 48
所以差是16。
编辑:要按照您希望的方式比较电子邮件,您应该涉及更多逻辑,例如,仅比较登录部分(删除由"@"
分隔的域):str1.split("@")[0].compareTo(str2.split("@")[0])
答案 1 :(得分:3)