Java compareTo() 方法

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

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

语法:

int compareTo(Object o)//o -- 要比较的对象。

或

int compareTo(String anotherString)//anotherString -- 要比较的字符串。

返回值

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

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

    public static void main(String args[]) {
String str1 = "Strings";
String str2 = "Strings";
String str3 = "Strings123"; int result = 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

按照字典比较其实说的是比对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


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

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

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。

注:转载于https://www.runoob.com/java/java-string-compareto.html

Java compareTo() 方法(转载)的更多相关文章

  1. Java compareTo() 方法

    以金钱实交(realPay),和使用预存(usePurseFee)为例: if ( realPay.compareTo(usePurseFee) <=0) { XXXXXXX; }else { ...

  2. Java String.compareTo()方法

    描述:java.lang.String.compareTo() 方法比较两个字符串的字典. 比较是基于字符串中的每个字符的Unicode值.此String对象表示的字符序列的 参数字符串表示的字符序列 ...

  3. java 集合框架(TreeSet操作,自动对数据进行排序,重写CompareTo方法)

    /*TreeSet * treeSet存入数据后自动调用元素的compareTo(Object obj) 方法,自动对数据进行排序 * 所以输出的数据是经过排序的数据 * 注:compareTo方法返 ...

  4. Java——String类中的compareTo方法总结

    String类的定义:    java.lang  类 String   java.lang.Object      java.lang.String 所有已实现的接口:Serializable, C ...

  5. java中两字符串比较--compareTo方法

    java.lang.String.compareTo() 方法比较两个字符串的字典,比较是基于字符串中的每个字符的Unicode值 String n1 = "1"; String ...

  6. java中的compareto方法以及LIst列表排序的详细介绍【转】

    java中的compareto方法的详细介绍 javacompareTo  java中的compareto方法,返回参与比较的前后两个字符串的asc码的差值,看下面一组代码 String a=&quo ...

  7. Java中的compareTo()方法,compareToIgnoreCase()方法

    1.compareTo(String)方法: Java中String类有一个compareTo方法,该方法返回一个int类型的数据.其比较规则是:拿出字符串的第一个字符与参数的第一个字符进行比较,如果 ...

  8. java中的compareto方法的详细介绍

    java中的compareto方法的详细介绍 Java Comparator接口实例讲解(抽象方法.常用静态/默认方法) 一.java中的compareto方法 1.返回参与比较的前后两个字符串的as ...

  9. Java compare方法和compareTo方法

    Java Comparator接口排序用法,详细介绍可以阅读这个链接的内容:https://www.cnblogs.com/shizhijie/p/7657049.html 对于 public int ...

随机推荐

  1. 图的存储与遍历C++实现

    1.图的存储 设点数为n,边数为m 1.1.二维数组 方法:使用一个二维数组 adj 来存边,其中 adj[u][v] 为 1 表示存在 u到 v的边,为 0 表示不存在.如果是带边权的图,可以在 a ...

  2. 面试题五:Spring

    Spring IoC 什么是IoC? 容器创建Bean对象,将他们装配在一起,配置并且管理它们的完整生命周期. Spring容器使用依赖注入来管理组成应用程序的Bean对象: 容器通过提供的配置元数据 ...

  3. rabbitmq概念简介

    AMQP协议 AMQP: Advanced Message Queue,高级队列协议. 特征: 这是一个在进程间传递异步消息的网络协议,因此数据的发送方.接收方以及容器(MQ)都可以在不同的设备上. ...

  4. 资源:Git快速下载路径

    Git快速下载地址: 地址:https://npm.taobao.org/mirrors/git-for-windows/

  5. Docker:银河麒麟系统/Ubuntu/arm64-离线安装Docker,配置自启

    下载离线包 离线安装包地址:https://download.docker.com/linux/debian/dists/stretch/pool/stable/ 注意: amd64是处理器64位 复 ...

  6. MySQL中的字段拼接 concat() concat_ws() group_concat()函数

    1.concat()函数 2.concat_ws()函数 3.group_concat()函数 操作的table select * from test_concat order by id limit ...

  7. ThinkPHP3.2.3 语言包切换中英文切换

    今天要用ThinkPHP3.2.3做一个小网站,其中涉及到切换中文与英文,通过查询手册和百度实现了该操作,现在将我具体的操作步骤记录下来,作为笔记和大家分享. php开发框架:ThinkPHP3.2. ...

  8. Socket介绍(五)

    套接字(socket)是一个抽象层,应用程序可以通过它发送或接收数据,可对其进行像对文件一样的打开.读写和关闭等操作.套接字允许应用程序将I/O插入到网络中,并与网络中的其他应用程序进行通信.网络套接 ...

  9. Matplotlib和Seaborn演示Python可视化

    数据可视化:就是使用图形图表等方式来呈现数据,图形图表能够高效清晰地表达数据包含的信息. Seaborn是基于matplotlib,在matplotlib的基础上进行了更高级的API封装,便于用户可以 ...

  10. Odoo开发规范

    本文来源:https://www.jianshu.com/p/e892bf01f036 Odoo开发规范 模块结构 文件夹列表及对应作用 data/:演示和数据文件 models/:模型定义 cont ...