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

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

叮当猫咪
浏览 846回答 5
5回答

犯罪嫌疑人X

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

白猪掌柜的

楼主请看一下java api中对String类中compareTo方法的解释,1.result.compareTo(result2)) 是根据第一个红框标注的方法比较的,即返回这两个字符串在位置 k 处两个char 值的差2."hello".compareTo("hello,")则是根据第二个红框标注的方式进行比较的,即返回这两个字符串长度的差

MYYA

String 是字符串,它的比较用compareTo方法,它从第一位开始比较,如果遇到不同的字符,则马上返回这两个字符的ascii值差值..返回值是int类型第一个是“hello,word!”与"bhello,w"进行比较,第一位就不相同,b和h在ascii码中相差6;第二个是“hello”和“hello,”,如果按字典顺序此字符串小于字符串参数,则返回一个小于 0 的值

天涯尽头无女友

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()&nbsp;

繁星淼淼

public int compareTo(String anotherString) {int len1 = value.length;int len2 = anotherString.value.length;int lim =&nbsp;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
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java