菜鸟教程 -- 学的不仅是技术,更是梦想!

Java 教程
(追記) (追記ここまで)

Java compareTo() 方法

Java String类Java String类


compareTo() 方法用于两种方式的比较:

  • 字符串与对象进行比较。
  • 按字典顺序比较两个字符串。

语法

intcompareTo(Objecto)intcompareTo(StringanotherString)

参数

  • o -- 要比较的对象。

  • anotherString -- 要比较的字符串。

返回值

返回值是整型,它是先比较对应字符的大小(ASCII码顺序),如果第一个字符和参数的第一个字符不等,结束比较,返回他们之间的长度差值,如果第一个字符和参数的第一个字符相等,则以第二个字符和参数的第二个字符做比较,以此类推,直至比较的字符或被比较的字符有一方结束。

  • 如果参数字符串等于此字符串,则返回值 0;
  • 如果此字符串小于字符串参数,则返回一个小于 0 的值;
  • 如果此字符串大于字符串参数,则返回一个大于 0 的值。

说明:

如果第一个字符和参数的第一个字符不等,结束比较,返回第一个字符的ASCII码差值。

如果第一个字符和参数的第一个字符相等,则以第二个字符和参数的第二个字符做比较,以此类推,直至不等为止,返回该字符的ASCII码差值。 如果两个字符串不一样长,可对应字符又完全一样,则返回两个字符串的长度差值。

实例

publicclassTest{publicstaticvoidmain(Stringargs[]){Stringstr1 = "Strings"; Stringstr2 = "Strings"; Stringstr3 = "Strings123"; intresult = str1.compareTo(str2); System.out.println(result); result = str2.compareTo(str3); System.out.println(result); result = str3.compareTo(str1); System.out.println(result); }}

以上程序执行结果为:

0
-3
3

Java String类Java String类

AI 思考中...

3 篇笔记 写笔记

  1. #0

    林语琛

    357***[email protected]

    46

    按照字典比较其实说的是比对ASCII码的值

    其实这里说的不够明确,compareTo(String)方法中其实是从头开始,一个一个字符的比对原字符串和参数字符串中的字符,如果相同就下一个,直到字符出现不同(包括某一个字符串结束了)就计算这两个不同字符的ASCII码的差,作为返回值。(或是直到最后都相同就返回0)

    也正是因为这样的计算才使得原字符串更长的时候(假设前几位相同的情况下),返回值会大于零(因为那一位是某个字符的ASCII码减去0,ASCII码都是正数),而原字符串更短的时候,返回值会小于0(那一位是0减去某个字符的ASCII码)。

    但我们不要忽略了一种情况就是两个字符串虽然长度相等但是中间有字母不同:

    String str1="abcde";
    String str2="abdde";
    str1.compareTo(str2);

    这时的返回值是-1,即是c的ASCII码(99)减去了d的ASCII码(100)所得。

    还有一种情况字符串前面的字符相同但字符串长度不同时返回字符串相差位数而并非 ASCII 码差值。

    String str1 = "abc";
    String str2 = "abcdef";
    System.out.println(str1.compareTo( str2 ));

    输出 -3

    林语琛

    357***[email protected]

    9年前 (2017年07月13日)
  2. #0

    天之上

    136***[email protected]

    15

    关于这个方法,不管参数是对象还是字符串,最终要比较的都是两个字符串的不同,以下称调用方法那边的为原字符串,方法参数里的为参数字符串。

    这个方法分为两种比较方式:

    1、不同的字符在较短字符串长度之内时

    返回值=原字符串与参数字符串中第一个不同字符相差的ASCII码值,为原减参。

    例子如下:

    String str1="javasdrip";
    String str2="javdscript";
    str1.compareTo(str2);

    此时返回值为-3,是a的ASCII码(97)减去了d的ASCII码值(100)得到。

    注意:只比较第一个不同的字符,后面的d和c也不一样但不会进行比较了。

    2、不同的字符在较短字符串长度之外时

    返回值=原字符串与参数字符串相差的字符个数,原字符串长度大时为正,反之为负。

    例子如下:

    String str1="java";
    String str2="javascript";
    str1.compareTo(str2);

    此时返回值为-6,是str1相比str2少去的字符个数。

    注意:此时只比较位数,而无关ASCII码值,并非是0的ASCII码值减去s的ASCII码值,在参数字符串前面字符和原字符串一样时,返回值就是两者相差的字符个数,即使改变后面的字符也不会影响到返回的值,比如String str2="java123$%^",此时结果仍是-6。

    天之上

    136***[email protected]

    9年前 (2017年11月07日)
  3. #0

    看下 compareTo 的源码:

    /*
    *如果参数字符串等于此字符串,则返回值 0;
    *如果此字符串按字典顺序小于字符串参数,则*返回一个小于 0 的值;
    *如果此字符串按字典顺序大于字符串参数,则返回一个大于 0 的值。
    */
    public int compareTo(String anotherString) {
     int len1 = value.length;
     int len2 = anotherString.value.length;
     //取数组长度里面最小的
     int lim = Math.min(len1, len2);
     
     // 获得两个数组,这两个数组就是string的属性
     char v1[] = value;
     char v2[] = anotherString.value;
     int k = 0;
     while (k < lim) {
     //获取第K的字符,进行比较
     char c1 = v1[k];
     char c2 = v2[k];
     if (c1 != c2) {
     //Java使用的是Unicode编码,因此返回这两个字符的Unicode差值。
     return c1 - c2;
     }
     k++;
     }
     
     //如果前lim个字符都相同,那么就返回长度差。
     return len1 - len2;
    }
    • 1、取得string的value数组
    • 2、取得value数组里面的元素
    • 3、按照unicode值进行比较
    • 4、返回比较的值
    String a = "a";
    String b = "b";
    System.out.println(a.compareTo(b));

    输出值 -1

    String a = "b";
    String b = "a";
    System.out.println(a.compareTo(b));

    输出值 1

    String a = "a";
    String b = "a";
    System.out.println(a.compareTo(b));

    输出 0

    两个字符串首字母不同,则该方法返回首字母的 asc 码的差值。

    String a = "abc";
    String b = "bcdfg";
    System.out.println(a.compareTo(b));

    输出 -1。

    参与比较的两个字符串如果首字符相同,则比较下一个字符,直到有不同的为止,返回该不同的字符的 ascii 码差值。

    String a = "abc";
    String b = "abedfg";
    System.out.println(a.compareTo(b));

    输出 -2。

    两个字符串不一样长,可以参与比较的字符又完全一样,则返回两个字符串的长度差值。

    String a = "abc";
    String b = "abcdefg";
    System.out.println(a.compareTo(b));

    输出 -4。

    string a = "abcde";
    String b = "abcd";
    System.out.println(a.compareTo(b));

    输出 1

    目前 compareTo 项目中的用途是比较版本号的高低。

    String a = "1.0.0";
    String b = "1.0.1";
    System.out.println(a.compareTo(b));

    输出 -1

    8年前 (2018年10月09日)

点我分享笔记

  • 昵称 (必填)
  • 邮箱 (必填)
  • 引用地址

AltStyle によって変換されたページ (->オリジナル) /