【问题标题】:What does the CompareTo function do in this situation in Java [closed]在这种情况下,CompareTo 函数在 Java 中的作用是什么 [关闭]
【发布时间】:2017-06-18 19:58:56
【问题描述】:
public static void main(String[] args) {
System.out.print("Comparing \"axe\" with \"dog\" produces ");
// I don't understand what this does.
int i = "axe".compareTo("dog");
System.out.println(i);
System.out.print("Comparing \"applebee's\" with \"apple\" produces ");
// neither this.
System.out.println( "applebee's".compareTo("apple") );
}
当我运行代码时,它会出现 -3,下一个是 5,
我不明白您如何比较字母并得出数字。
“applebee”和“dog”甚至不是字符串变量
这是在this链接的学校作业
【问题讨论】:
标签:
java
compare
compareto
【解决方案1】:
在练习之前,我的建议是阅读文档。在这种情况下,Oracle 参考清楚地解释了正数和负数的原因:
按字典顺序比较两个字符串。比较基于字符串中每个字符的 Unicode 值。此 String 对象表示的字符序列按字典顺序与参数字符串表示的字符序列进行比较。如果此 String 对象按字典顺序位于参数字符串之前,则结果为负整数。如果此 String 对象按字典顺序跟随参数字符串,则结果为正整数。如果字符串相等,则结果为零;当 equals(Object) 方法返回 true 时,compareTo 返回 0。
这里解释了为什么 -3 和 +5:
这是字典顺序的定义。如果两个字符串不同,则它们在某个索引处具有不同的字符,该索引是两个字符串的有效索引,或者它们的长度不同,或两者兼而有之。如果它们在一个或多个索引位置具有不同的字符,则设 k 为此类索引中的最小;然后,在位置 k 处的字符具有较小值的字符串(通过使用
this.charAt(k)-anotherString.charAt(k)
如果它们没有不同的索引位置,则较短的
字符串按字典顺序位于较长字符串之前。在这种情况下,
compareTo 返回字符串长度的差值
是,值:
this.length()-anotherString.length()
【解决方案2】:
Java String 类提供.compareTo () 方法以按字典顺序比较字符串。
这个方法的返回是一个int,可以解释如下:
- 返回
< 0,然后调用该方法的字符串按字典顺序排在第一位(在字典中排在第一位)
- 返回
== 0,那么这两个字符串在字典上是等价的
- 返回
> 0,然后传递给 compareTo 方法的参数按字典顺序排列。
在你的例子中:
"axe".compareTo("dog") 返回-3 因为axe 在字典中按字典顺序排在第一位。
它从每个字符串的第一个字符开始:a 在字典中位于 d 之前。如果比较的字符在字典上是等效的
它将转到字符串中的下一个字符进行比较,依此类推。
"applebee's".compareTo("apple")
第一个字符串 "apple" 中的前 5 个字符在字典上等同于第二个字符串,但字符 bee's 在第二个字符串之后,因此它将返回大于 0 的 5,因为第二个字符串在字典中排在第一位.
【解决方案3】:
compareTo 返回的具体数字是您应该尽量不关心的实现细节。 compareTo 的文档指定您应该关心的只是符号:是负数(a.compareTo(b) < 0 暗示 a < b)、零(a.compareTo(b) 暗示 a 等于 b)还是正数(a.compareTo(b) > 0 暗示 a > b)。