String的compareTo其实就是依次比较两个字符串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进行姓名的排序)

  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[] array = new String[] { "lilei", "libai", "james", "poly",
"wobfei" };
//使用简单的循环排序
for (int i = 0; i < array.length - 1; i++) {
for (int j = i + 1; j < array.length; j++) {
if (array[i].compareTo(array[j]) > 0) {
String temp = array[i];
array[i] = array[j];
array[j] = temp;
}
}
}

使用上面针对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)

String的compareTo用法的更多相关文章

  1. 标准C++中的string类的用法总结

    标准C++中的string类的用法总结 相信使用过MFC编程的朋友对CString这个类的印象应该非常深刻吧?的确,MFC中的CString类使用起来真的非常的方便好用.但是如果离开了MFC框架,还有 ...

  2. sstream头文件-getline 函数 和 stringstream函数 和string的常见用法

    2017-08-12 19:50:50 writer:pprp getline函数可以读入一行的字符,不论有没有空格 第一个参数,流 第二个参数 ,将流读入的地方 第三个参数,当读到某个字符的时候停止 ...

  3. 详解 SWT 中的 Browser.setUrl(String url, String postData, String[] headers) 的用法

    http://hi.baidu.com/matrix286/item/b9e88b28b90707c9ddf69a6e ———————————————————————————————————————— ...

  4. String的高级用法(String.Format)

    string.Format C#的String.Format的一般地我们可以直接使用string.format()或int.ToString()和float.ToString() 下面是一些Strin ...

  5. VC++ 标准C++中的string类的用法总结

    相信使用过MFC编程的朋友对CString这个类的印象应该非常深刻吧?的确,MFC中的CString类使用起来真的非常的方便好用.但是如果离开了MFC框架,还有没有这样使用起来非常方便的类呢?答案是肯 ...

  6. [C++][语言语法]标准C++中的string类的用法总结

    转自:http://www.cnblogs.com/xFreedom/archive/2011/05/16/2048037.html 要想使用标准C++中string类,必须要包含 #include ...

  7. String的compareTo()方法返回值

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

  8. JavaScript学习总结一(String对象的用法)

    javascript String对象的常用API 1:indexOf indexOf() 方法可返回某个指定的字符串值在字符串中首次出现的位置.如果没有找到匹配的字符串则返回 -1.注意: inde ...

  9. 标准C++中string类的用法

    转自博客园:http://www.cnblogs.com/xFreedom/archive/2011/05/16/2048037.html 相信使用过MFC编程的朋友对CString这个类的印象应该非 ...

随机推荐

  1. 吴裕雄--天生自然MySQL学习笔记:MySQL 连接

    使用mysql二进制方式连接 您可以使用MySQL二进制方式进入到mysql命令提示符下来连接MySQL数据库. 实例 以下是从命令行中连接mysql服务器的简单实例: [root@host]# my ...

  2. Java并发分析—ConcurrentHashMap

    LZ在 https://www.cnblogs.com/xyzyj/p/6696545.html 中简单介绍了List和Map中的常用集合,唯独没有CurrentHashMap.原因是CurrentH ...

  3. [CISCN2019 华北赛区 Day1 Web1]Dropbox-phar文件能够上传到服务器端实现任意文件读取

    0x00知识点 phar是什么: 我们先来了解一下流包装 大多数PHP文件操作允许使用各种URL协议去访问文件路径:如data://,zlib://或php://.例如常见的 include('php ...

  4. 3. laravel 5.5 多子域名 + dingo + jwt 简单环境搭建

    环境介绍 laravel 5.5.* + php 7.2 + mysql 5.7.27 1. 创建 laravel 项目 (自行 配置一下域名 如果 不会 请参考laravel 的第一篇文章) com ...

  5. Python笔记_第四篇_高阶编程_实例化方法、静态方法、类方法和属性方法概念的解析。

    1.先叙述静态方法: 我们知道Python调用类的方法的时候都要进行一个实例化的处理.在面向对象中,一把存在静态类,静态方法,动态类.动态方法等乱七八糟的这么一些叫法.其实这些东西看起来抽象,但是很好 ...

  6. 基于libcurl的POST(http)

    #include <stdio.h> #include <curl/curl.h> int main (void) { char *url="http://www.n ...

  7. Python 安装zbar-py时出现 无法打开包括文件: “unistd.h” no such file or directory

    问题 途中使用的命令是cl.exe,在执行命令的时候找不到对应的unistd.h文件. unistd.h是Unix系统的文件,因此,十有八九,使用的是Windows系统.下面的代码可以修复,但是如果修 ...

  8. JavaWeb中的高级知识总结

    知识结构图 文件下载 默认情况下,如果浏览器可以处理Content-Type响应头中指定数据类型,浏览器就会直接处理,比如显示出HTML页面(text/html),或者显示出照片(image/png) ...

  9. C++类的访问控制关键字

    public:修饰的成员变量和函数,可以在类的内部和类的外部被访问. private:修饰的成员变量和函数,只能在类的内部被访问,不能在类的外部被访问. protected:修饰的成员变量和函数,只能 ...

  10. MySql数据库,查询数据导出时会出现重复的记录(数据越多越明显)

    在查询数据时,数据量多的时候,我们会使用分页功能. 每页显示多少数据. 这种情况下,一半看不出什么问题. 而导出数据时,有时就是通过分页的方法,逐步讲数据追加到导出文件中. 当全部数据都导出之后,就有 ...