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. .NET Core如何全局获取用户信息?

    前言 在增删改查中的增和改操作中,我们经常需要更新数据流的创建人和修改人,无论我们项目是基于DDD,抑或是简单仅有服务层,此时我们都需要获取用户信息,那么我们只能将用户标识从控制器层层传递到服务或仓储 ...

  2. Mac nasm 汇编入门

    下载 brew install nasm code SECTION .data msg: db "hello world", 0x0a len: equ $-msg SECTION ...

  3. 痞子衡嵌入式:对比i.MXRT与LPC在RTC外设GPREG寄存器使用上的异同

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是对比i.MXRT与LPC在RTC外设GPREG寄存器使用上的异同. 本篇是 <在SBL项目实战中妙用i.MXRT1xxx里Syst ...

  4. Linux:CentOS-7常用命令

    查看进程 1. ps -ef | grep #查看进程 ps -ef | grep 名称 #示例 ps -ef | grep docker 2. ps aux #当前所有进程信息 ps aux VSZ ...

  5. 从S3中拷贝或同步文件

    p.p1 { margin: 0; font: 16px "Helvetica Neue"; color: rgba(53, 53, 53, 1) } p.p2 { margin: ...

  6. buu pyre

    一.下载附件是是pyc的字节码文件,找个在线网站反编译一下 思路还是挺清晰: 先逆着求出code, 这里就是求余,有点麻烦,那个+128%128其实没啥用的,省略就好了 算法里面再处理一下细节,跑一下 ...

  7. Tomcat和Servlet简析

    目录 Servlet Tomcat 参考 Servlet Servlet通常指我们继承了Servlet接口的类,我们开发Servlet时一般就是继承HttpServlet重写它的doGet.doPos ...

  8. 性能基准DevOps之如何提升脚本执行效率

    1.宝路说 宝路最近一直在自我思考:性能基准DevOps工作已经开展一段时间了,目前我们确实已经取得了一些成果,显然这还远远不够.趁闲暇之余跟组员进行了简单的头脑风暴!于是这就有了今天的主题,当然这仅 ...

  9. Windows内核开发-2-开始内核开发-2-内核开发入门

    Windows内核开发-2-开始内核开发-2- 第一个驱动程序: 直接采用vs2019中的Empty WDM Driver 模块创建: 初始的项目文件夹中有一个Driver Files里面会有一个.i ...

  10. 基于Ryu的流量采集代码实现

    1 from __future__ import division 2 import time 3 import math 4 import xlwt 5 from ryu.controller im ...