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)

  • 相关阅读:
    Codeforces Beta Round #92 (Div. 2 Only) B. Permutations 模拟
    POJ 3281 Dining 最大流 Dinic算法
    POJ 2441 Arrange the BUlls 状压DP
    URAL 1152 Faise Mirrors 状压DP 简单题
    URAL 1039 Anniversary Party 树形DP 水题
    URAL 1018 Binary Apple Tree 树形DP 好题 经典
    pytorch中的forward前向传播机制
    .data()与.detach()的区别
    Argparse模块
    pytorch代码调试工具
  • 原文地址:https://www.cnblogs.com/yangkai-cn/p/4016668.html
Copyright © 2011-2022 走看看