Java compareTo() 方法(转载)
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() 方法(转载)的更多相关文章
- Java compareTo() 方法
以金钱实交(realPay),和使用预存(usePurseFee)为例: if ( realPay.compareTo(usePurseFee) <=0) { XXXXXXX; }else { ...
- Java String.compareTo()方法
描述:java.lang.String.compareTo() 方法比较两个字符串的字典. 比较是基于字符串中的每个字符的Unicode值.此String对象表示的字符序列的 参数字符串表示的字符序列 ...
- java 集合框架(TreeSet操作,自动对数据进行排序,重写CompareTo方法)
/*TreeSet * treeSet存入数据后自动调用元素的compareTo(Object obj) 方法,自动对数据进行排序 * 所以输出的数据是经过排序的数据 * 注:compareTo方法返 ...
- Java——String类中的compareTo方法总结
String类的定义: java.lang 类 String java.lang.Object java.lang.String 所有已实现的接口:Serializable, C ...
- java中两字符串比较--compareTo方法
java.lang.String.compareTo() 方法比较两个字符串的字典,比较是基于字符串中的每个字符的Unicode值 String n1 = "1"; String ...
- java中的compareto方法以及LIst列表排序的详细介绍【转】
java中的compareto方法的详细介绍 javacompareTo java中的compareto方法,返回参与比较的前后两个字符串的asc码的差值,看下面一组代码 String a=&quo ...
- Java中的compareTo()方法,compareToIgnoreCase()方法
1.compareTo(String)方法: Java中String类有一个compareTo方法,该方法返回一个int类型的数据.其比较规则是:拿出字符串的第一个字符与参数的第一个字符进行比较,如果 ...
- java中的compareto方法的详细介绍
java中的compareto方法的详细介绍 Java Comparator接口实例讲解(抽象方法.常用静态/默认方法) 一.java中的compareto方法 1.返回参与比较的前后两个字符串的as ...
- Java compare方法和compareTo方法
Java Comparator接口排序用法,详细介绍可以阅读这个链接的内容:https://www.cnblogs.com/shizhijie/p/7657049.html 对于 public int ...
随机推荐
- layui 列合并相同内容
table.render({ elem: '#tbdata', method: 'post', data: jsonData, height: temphei, limit: 20, limits: ...
- COURSES 赤裸裸的二分匹配大水题
COURSES 1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 #include ...
- Linux搭建私有yum源
一.前期准备 环境:CentOS 8.3 镜像: CentOS-7-x86_64-Everything-2009.iso CentOS-8.3.2011-x86_64-dvd1.iso 二.搭建步骤 ...
- JNI小记
本文参考<较详细的介绍JNI>一文,并添加了一些方法,代码已经过测试,留待日后工作使用.关于JNI的HelloWorld的例子,就不赘述了. java代码: 1 package com.c ...
- Linux创建ftp并设置权限以及忘记ftp帐号(密码)修改 (转)
忘记ftp密码修改方法:1.登录服务器 cd /etc/vsftpdcat ftpusers找到对应的ftp用户名 (如果用户名也忘记了 那么 cd /etc 然后cat passwd 查看用户 ...
- linux菜鸡学习之路
Linux入门 Linux 介绍 1.Linux怎么读 2.Linux是一款操作系统,免费,开源,安全,高效,稳定,处理高并发非常强悍. Linux文件系统目录 基本介绍 linux的文件系统树状目录 ...
- muggle_ocr 下载安装
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple muggle_ocr
- Quzrtz.net 示例
//框架.Net Core 2.0//先用Nuget 安装最新quartz.net using System; using Quartz; using Quartz.Impl; using Syste ...
- 「CF521D」 Shop
「CF521D」 Shop 传送门 题目说是有三种操作,首先可以知道赋值操作是可以转化为加法操作的,即 \((1,b) \rightarrow (2,b-a_i)\) 然后加法对于一个数你肯定优先选择 ...
- python使用笔记008-模块
模块的原理: 1.就是一个python文件 2.标准模块是python自带的 3.第三方模块需要自己安装 导入模块的顺序: 1.从当前目录下找 2.从python的环境变量中找 一.自己定义的模块 1 ...