为了账号安全,请及时绑定邮箱和手机立即绑定

java中的String的compareTo()方法问题

java中的String的compareTo()方法问题

不负相思意 2019-05-14 09:08:40
public void inputMoreTimes(){String result ="hello,word!";String result2="bhello,w";System.out.println(result.compareTo(result2));System.out.println("hello".compareTo("hello,"));}为什么两个值不一样? 一个是6 ,一个是-1
查看完整描述

5 回答

?
慕的地8271018

TA贡献1796条经验 获得超4个赞

楼主请看一下java api中对String类中compareTo方法的解释,

1.result.compareTo(result2)) 是根据第一个红框标注的方法比较的,即返回这两个字符串在位置 k 处两个char 值的差

2."hello".compareTo("hello,")
则是根据第二个红框标注的方式进行比较的,即返回这两个字符串长度的差




查看完整回答
反对 回复 2019-05-15
?
缥缈止盈

TA贡献2041条经验 获得超4个赞

String 是字符串,它的比较用compareTo方法,它从第一位开始比较,如果遇到不同的字符,则马上返回这两个字符的ascii值差值..返回值是int类型

第一个是“hello,word!”与"bhello,w"进行比较,第一位就不相同,b和h在ascii码中相差6;第二个是“hello”和“hello,”,如果按字典顺序此字符串小于字符串参数,则返回一个小于 0 的值

查看完整回答
反对 回复 2019-05-15
?
慕田峪4524236

TA贡献1875条经验 获得超5个赞

public int compareTo(String anotherString)
方法是按字典顺序比较两个字符串。该比较基于字符串中各个字符的 Unicode 值。按字典顺序将此 String
对象表示的字符序列与参数字符串所表示的字符序列进行比较。如果按字典顺序此 String
对象位于参数字符串之前,则比较结果为一个负整数。如果按字典顺序此 String
对象位于参数字符串之后,则比较结果为一个正整数。如果这两个字符串相等,则结果为 0;compareTo 只在方法 equals(Object)
返回 true 时才返回 0。
这是字典排序的定义。如果这两个字符串不同,那么它们要么在某个索引处的字符不同(该索引对二者均为有效索引),要么长度不同,或者同时具备这两种情况。如果它们在一个或多个索引位置上的字符不同,假设
k 是这类索引的最小值;则在位置 k 上具有较小值的那个字符串(使用 <
运算符确定),其字典顺序在其他字符串之前。在这种情况下,compareTo 返回这两个字符串在位置 k
处两个char 值的差,即值:
this.charAt(k)-anotherString.charAt(k)
如果没有字符不同的索引位置,则较短字符串的字典顺序在较长字符串之前。在这种情况下,compareTo
返回这两个字符串长度的差,即值:
this.length()-anotherString.length()

字典顺序比较两个字符串。该比较基于字符串中各个字符的 Unicode 值。按字典顺序将此 String
对象表示的字符序列与参数字符串所表示的字符序列进行比较。如果按字典顺序此 String
对象位于参数字符串之前,则比较结果为一个负整数。如果按字典顺序此 String
对象位于参数字符串之后,则比较结果为一个正整数。如果这两个字符串相等,则结果为 0;compareTo 只在方法 equals(Object)
返回 true 时才返回 0。
这是字典排序的定义。如果这两个字符串不同,那么它们要么在某个索引处的字符不同(该索引对二者均为有效索引),要么长度不同,或者同时具备这两种情况。如果它们在一个或多个索引位置上的字符不同,假设
k 是这类索引的最小值;则在位置 k 上具有较小值的那个字符串(使用 <
运算符确定),其字典顺序在其他字符串之前。在这种情况下,compareTo 返回这两个字符串在位置 k
处两个char 值的差,即值:
this.charAt(k)-anotherString.charAt(k)
如果没有字符不同的索引位置,则较短字符串的字典顺序在较长字符串之前。在这种情况下,compareTo
返回这两个字符串长度的差,即值:
this.length()-anotherString.length()




 



查看完整回答
反对 回复 2019-05-15
?
白猪掌柜的

TA贡献1893条经验 获得超10个赞

public int compareTo(String anotherString) {
int len1 = value.length;
int len2 = anotherString.value.length;
int lim = Math.min(len1, len2);
char v1[] = value;
char v2[] = anotherString.value;

int k = 0;
while (k < lim) {
char c1 = v1[k];
char c2 = v2[k];
if (c1 != c2) {
return c1 - c2;
}
k++;
}
return len1 - len2;
}
这是string的比较方法代码。第一个返回6因为比较第一个字符用'h'-'b'=6,第二个因为hello这几个字符都一样,所以返回第一个字符串的长度-第二个字符串长度5-6=-1



查看完整回答
反对 回复 2019-05-15
  • 5 回答
  • 0 关注
  • 413 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信