1

在 oracles网站上的 Java API 中:“compareTo Returns:”如果参数字符串等于该字符串,则值为 0;如果此字符串按字典顺序小于字符串参数,则值小于 0;如果此字符串按字典顺序大于字符串参数,则值大于 0。" "

这是一个 if 语句:

String a = "abd";
String b = "abc";

if(a.compareTo(b) >= 1)

返回真,因为字符串 a 更大,按字典顺序。

我的问题是,compareTo 是否总是返回 0、1 或 -1?还是返回字符串大于或小于字符串参数的实际数量。

那么在上面的 if 语句中,由于“abd”比“abc”大一,它返回 1 吗?

4

3 回答 3

5

就您而言,不知道compareTo返回值的大小,只是符号。在实践中,大多数compareTo实现将返回 -1、0 或 1,但合同明确规定了正数或负数,您应该相应地编写代码(例如,使用int compare = a.compareTo(b); if(compare > 0) {...} else...)。

于 2013-09-14T06:12:47.680 回答
5

根据http://docs.oracle.com/javase/6/docs/api/java/lang/String.html#compareTo%28java.lang.String%29

在这种情况下, compareTo 返回两个字符串中位置 k > 处的两个字符值的差值——即值:

this.charAt(k)-anotherString.charAt(k)

如果它们没有不同的索引位置,则较短的字符串按字典顺序位于较长的字符串之前。在这种情况下, compareTo 返回字符串长度的差值——即值:

this.length()-anotherString.length()

对于最后一种情况,对于 的长度String,根据文档,它似乎可以返回 -1, 0, 1 以外的值

于 2013-09-14T06:14:35.083 回答
0

Falmarri完全回答了这个问题;与仅指示返回值为正、负或零的条件相反。

“这是字典顺序的定义。如果两个字符串不同,则它们在某个索引处具有不同的字符,该索引对于两个字符串都是有效的索引,或者它们的长度不同,或两者兼而有之。如果它们在一个或更多的索引位置,设 k 是最小的这样的索引;那么在位置 k 的字符具有较小值的字符串,由使用 < 运算符确定,按字典顺序在另一个字符串之前。在这种情况下,compareTo 返回两者的差两个字符串中位置 k 处的字符值——即值:

this.charAt(k)-anotherString.charAt(k)

如果它们没有不同的索引位置,则较短的字符串按字典顺序位于较长的字符串之前。在这种情况下, compareTo 返回字符串长度的差值——即值:

this.length()-anotherString.length()"

于 2019-11-07T05:57:48.737 回答