比较两个单词(字符串)

3
这段代码是什么意思?
if( item.compareTo(root.element) < 0 ){

   }

我看到这么一句话:

"按字典顺序比较两个字符串。返回一个整数,指示此字符串是否大于(结果为> 0),等于(结果为= 0)或小于(结果为< 0)参数。"

但我无法理解。有人能举个例子解释一下吗?

5个回答

4

请查看Comparable接口的文档,该接口首先定义了compareTo()方法。在String中实现此接口遵循相同的约定:

将此对象与指定对象进行比较以进行排序。如果此对象小于、等于或大于指定对象,则返回负整数、零或正整数

这意味着:如果当前字符串在字典顺序下小于作为参数接收到的字符串,则返回负整数值。如果当前字符串大于作为参数接收到的字符串,则返回正整数值。否则,字符串相等,返回0


1
它是如何确定哪个字符串更大的? - MosesA
2
使用“字典序”(lexicographical order)排序,即:如果一个字符串“a”在字典中出现在另一个字符串“b”的前面,则称“a”小于“b”。 - Óscar López
1
按字典顺序排列(即按字母顺序)。我不确定问题是什么。 - jpm
2
Java是通过使用Unicode表中的位置来比较字符串字符的大小。排序后,您将得到类似于12, 3, Aa, BB, a, bb, ńŇ, Ňń的结果。 - Pshemo

2

它会像这样检查两个字符串是否相等。

a>A  would return a positive number as `a` is greater than `A`
A>a  would return a negetive number as `A` is less than `a`
a==a would return 0 as `a` is equal to `a`
a>Z  would return a positive number as 'a' is greater than 'A'
trend> zend would return a positive number as `t` is greater than 'z'   

这不是正确的:compareTo 不一定返回“-1”、“0”或“1”。它返回“负数”、“零”或“正数”。例如,“A”.compareTo(“a”)返回-32。 - jahroy
没问题。这些比较返回的实际值是:-32,32,0,7,-6。这为我们提供了一些关于如何计算这些值的见解。 - jahroy
@jahroy 所以,它们基本上会返回 ASCII 值。我是对的吗? - PermGenError
对于简单的一个字符比较,你将得到非常类似于ASCII值之间的差异。如果你比较字符串,则会考虑每个字符的值和位置(我这么认为)。对于“trend and zend”,它似乎会找到第一个不同之处,并且不关心后续发生了什么。我现在在一个测试程序中玩弄它,这非常容易做到。 - jahroy
@jahroy 太棒了,谢谢你让我知道,我一直以为返回值是-1、1、0呢..哈哈.. :) - PermGenError
显示剩余4条评论

2

someObject.compareTo(anotherObject)如果someObjectanotherObject之前,将返回负数。

下面是一个比较字符串对象的示例:

if ("apple".compareTo("zebra") < 0) {
    System.out.println("I will be printed");
}
else {
    System.out.println("I will NOT be printed");
}

1
像 x、y、z 这样的吗?还是 x 等于一个字符串?如果 x 是字符串,它计算时按字母顺序吗? - MosesA
1
@AdegokeA - 我编辑了我的答案,所以它(希望)更有意义。回答你的问题:是的,如果对象是字符串,则按字母顺序进行比较。如果对象不是字符串,则行为由相关类中实现_compareTo_的方式定义。这就是_Comparable_接口的美妙之处。任何对象都可以实现它并且任何实现它的对象都可以排序和比较(而不知道它如何工作的细节)。 - jahroy

2

在编写排序代码时,您需要使用此方法来判断item是在root.element之前还是之后。


1
这是按字母顺序排序吗? - MosesA
1
是的... 如果item和root是字符串。实现Comparable接口的每个类都必须定义compareTo方法,为该类赋予有意义的语义。 - jpm
@jpm描述得非常好 - 一般来说,它可能是按字母顺序排列的,但这实际上取决于compareTo在其实现中的具体实现方式! - John3136

2
如果word1=item并且word2=root.element并且两者都在字典中,则应该先出现word1再出现word2。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接