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

publicvoidinputMoreTimes(){Stringresult="hello,word!";Stringresult2="bhello,w";System... 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
展开
 我来答
zhouyabd
推荐于2017-09-19 · TA获得超过127个赞
知道答主
回答量:24
采纳率:0%
帮助的人:11.8万
展开全部

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

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

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

请楼主采纳

pieryon
推荐于2017-10-06 · 知道合伙人数码行家
pieryon
知道合伙人数码行家
采纳数:14410 获赞数:166867
获取软件设计师高级职称 万达金融最佳创新奖

向TA提问 私信TA
展开全部
Java中String类有一个compareTo方法,该方法返回一个int类型的数据。其比较规则是:拿出字符串的第一个字符与参数的第一个字符进行比较,如果两者不等,比较结束,返回两者的ascii差,即字符串的第一个字符减去参数的第一个字符的ascii码值,比如代码第五行的-1.如果相等,则比较第二个字符,以此类推。比较到最后还是相等的,方法返回值为0。
这里有一点需要注意:如果两个字符串的长度不同,并且一个字符串与另一个字符串的前面N个字符相等,那么这个方法返回返回两个字符串长度之差。比如代码第七行返回值为3.
举例如下:
String s1 = "abcd";
String s2 = "abce";
String s3 = "Abc";
String s4 = "abcdefg";
System.out.println(s1.compareTo(s2));
System.out.println(s1.compareTo(s3));
System.out.println(s4.compareTo(s1));
System.out.println(s4.compareTo(s2));
输出:-1 32 3 -1
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
禾木双子
2013-09-06 · TA获得超过260个赞
知道小有建树答主
回答量:204
采纳率:100%
帮助的人:149万
展开全部
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()

所以这两个值不一样。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
红莲公爵
2013-09-06 · TA获得超过392个赞
知道小有建树答主
回答量:193
采纳率:0%
帮助的人:55.8万
展开全部
String 是字符串,它的比较用compareTo方法,它从第一位开始比较,如果遇到不同的字符,则马上返回这两个字符的ascii值差值..返回值是int类型

第一个是“hello,word!”与"bhello,w"进行比较,第一位就不相同,b和h在ascii码中相差6;第二个是“hello”和“hello,”,如果按字典顺序此字符串小于字符串参数,则返回一个小于 0 的值
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
holmes1214
2013-09-06 · TA获得超过327个赞
知道答主
回答量:132
采纳率:0%
帮助的人:83.7万
展开全部
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
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(5)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式