zoukankan      html  css  js  c++  java
  • String的compareTo用法

    StringcompareTo其实就是依次比较两个字符串ASC码。如果两个字符的ASC码相等则继续后续比较,否则直接返回两个ASC的差值。如果两个字符串完全一样,则返回0。来看一下代码。

    public int compareTo(String anotherString) {

        int len1 = count;

        int len2 = anotherString.count;

        //获取到两个字符串的较短的长度

        int n = Math.min(len1, len2);

        char v1[] = value;

        char v2[] = anotherString.value;

        int i = offset;

        int j = anotherString.offset;

        if (i == j) {

            int k = i;

            int lim = n + i;

            while (k < lim) {

                char c1 = v1[k];

                char c2 = v2[k];

                //如果两个字符的ASC不相同,则直接返回

    if (c1 != c2) {

                    return c1 - c2;

                }

                k++;

            }

        } else {

            while (n-- != 0) {

               char c1 = v1[i++];

               char c2 = v2[j++];

                 //如果两个字符的ASC不相同,则直接返回

               if (c1 != c2) {

                   return c1 - c2;

               }

            }

        }

        //如果都一样,返回两个字符串的长度查

        return len1 - len2;

        }
     

    根据上面的代码,我们可以很方便的计算吃两个字符串的comperTo的值:

     

           "abcd".compareTo("adef")== -2

          "abc".compareTo("abcdef")== -3

          "abc".compareTo("abc") == 0

     

          但一直在想着compareTo可以用于实际中什么应用呢??我这里例举使用compareTo进行简单字符串的排序。(例如使用compareTo进行姓名的排序)

    Java代码 复制代码 收藏代码
    1. //需要进行排序的字符串  
    2. String[] array = new String[] { "lilei""libai""james""poly",  
    3.                 "wobfei" };  
    4. //使用简单的循环排序  
    5.         for (int i = 0; i < array.length - 1; i++) {  
    6.             for (int j = i + 1; j < array.length; j++) {  
    7.                 if (array[i].compareTo(array[j]) > 0) {  
    8.                     String temp = array[i];  
    9.                     array[i] = array[j];  
    10.                     array[j] = temp;  
    11.                 }  
    12.             }  
    13.         }  

     

     

     

    使用上面针对String的排序以后,字符串的内容将会是:

     

    james libai  lilei poly  wobfei


    补充:

    compareTo()的返回值是整型,它是先比较对应字符的大小(ASCII码顺序),如果第一个字符和参数的第一个字符不等,结束比较,返回他们之间的

    差值,如果第一个字符和参数的第一个字符相等,则以第二个字符和参数的第二个字符做比较,以此类推,直至比较的字符或被比较的字符有一方

    全比较完,这时就比较字符的长度.

    例:
    String s1 = "abc";
    String s2 = "abcd";
    String s3 = "abcdfg";
    String s4 = "1bcdfg";
    String s5 = "cdfg";
    System.out.println( s1.compareTo(s2) ); // -1 (前面相等,s1长度小1)
    System.out.println( s1.compareTo(s3) ); // -3 (前面相等,s1长度小3)
    System.out.println( s1.compareTo(s4) ); // 48 ("a"的ASCII码是97,"1"的的ASCII码是49,所以返回48)
    System.out.println( s1.compareTo(s5) ); // -2 ("a"的ASCII码是97,"c"的ASCII码是99,所以返回-2)

  • 相关阅读:
    Arr
    class4
    class3联大网页
    class33
    class3
    人机交换 NO 1书签
    大数据的框架与特点
    mapreduce排序
    mapreduce求平均数
    mapreduce去重
  • 原文地址:https://www.cnblogs.com/yangkai-cn/p/4016669.html
Copyright © 2011-2022 走看看