实际上我正在比较两个字符串,当我使用equals方法时返回true。而当我使用compareTo方法时,它返回22.
此外,我想知道这两个字符串在哪些地方有所不同。用java怎么找到这个?
提前致谢。
答案 0 :(得分:2)
根据compareTo()
的文档[...]如果两个字符串不同,那么 要么他们有不同的角色 在某个索引是有效的索引 对于两个字符串,或它们的长度是 不同或两者兼而有之。如果他们有 一个或多个不同的字符 索引位置,让k为最小 这样的指数;然后是其中的字符串 位置k处的字符具有 通过使用确定的较小值 <运算符,按字典顺序排列 在另一个字符串之前。在这 case,compareTo返回差异 中的两个字符值 在两个字符串中的位置k - 那个 是,值:
this.charAt(k)-anotherString.charAt(k)
如果没有索引位置 它们不同,然后是较短的字符串 按字典顺序排在较长时间之前 串。在这种情况下,compareTo 返回长度的差异 字符串 - 即值:
this.length()-anotherString.length()
因此,22不是两个字符串中不同字符的位置,而是第一个不同字符之间的距离。
关于你的第二个问题,我相信对两个字符串中的字符进行简单的迭代可以让你轻松找到它们不同的第一个字符位置
答案 1 :(得分:1)
这是一个非常奇怪的结果,因为compareTo(String)
的合同说equal
方法定义的两个相等对象也应该由compareTo
方法定义:
String#compareTo(String)
的:
“返回: 如果参数字符串等于此字符串,则值为0;如果此字符串按字典顺序小于字符串参数,则小于0的值;如果此字符串按字典顺序大于字符串参数,则值大于0.“
你介意发布这两个字符串吗?
答案 2 :(得分:0)
通常compareTo方法会向您显示,如果作为参数给出的字符串在字典上相等(返回0),则更大(返回某些< 0)或更小(返回某些> 0)。
答案 3 :(得分:0)
根据String compareTo(String anotherString),
返回: 如果参数字符串等于此字符串,则值为0;如果此字符串按字典顺序小于字符串参数,则小于0的值;如果此字符串按字典顺序大于字符串参数,则值大于0.
因此,如果两个字符串相等,则比较它们必须返回0.
答案 4 :(得分:0)
如果compareTo返回22,则表示字符串不相等。 equals方法应该显示false。你能告诉我们你的代码吗?
答案 5 :(得分:0)
这里有些严重错误。最有可能的是,当您与equals
和compareTo
进行比较时,您正在比较不同的字符串对。
Sun实施String错误的可能性为零(IMO)。这同样适用于从Sun代码库派生的任何供应商实现。一些非Sun代码库可能在String实现中存在错误,但这种情况可能会在几年前出现在其他人的代码中。
对于记录,equals
和compareTo
的合同是equals
在true
返回compareTo
时返回0
,而反之亦然。您的观察,如果正确,则违反了这一点。但这是一个很大的“如果”。
答案 6 :(得分:0)
equals - 它比较2个字符串内容,如果两个内容相同,则返回true。
compareto - 它比较2个字符串并返回正数,如果第一个字符串有更多的字符,那么第二个字符串。如果第一个字符串小于第二个字符串,则返回负数;如果两个字符串相等,则返回0。