String中compareTo的用法

jdk原文

compareTo()

public int compareTo(String anotherString)

按字典顺序比较两个字符串。 比较基于字符串中每个字符的Unicode值。 此String对象表示的字符序列按字典顺序与参数字符串表示的字符序列进行比较。 如果此String对象按字典顺序排在参数字符串之前,则结果为负整数。 如果此String对象按字典顺序跟随参数字符串,则结果为正整数。 如果字符串相等,结果为零; compareToequals(Object)方法返回0完全返回true 。

这是词典排序的定义。 如果两个字符串不同,则它们在某个索引处具有不同的字符,这些字符串是两个字符串的有效索引,或者它们的长度不同,或者两者都有。 如果它们在一个或多个索引位置具有不同的字符,则令k为最小的索引; 然后,通过使用<运算符确定其位置k处的字符具有较小值的字符串,按字典顺序排在另一个字符串之前。 在这种情况下, compareTo返回两个字符串中位置k处两个字符值的k - 即值:

this.charAt(k)-anotherString.charAt(k)

如果没有它们不同的索引位置,那么较短的字符串按字典顺序排在较长的字符串之前。 在这种情况下, compareTo返回字符串长度的差异 - 即值:

this.length()-anotherString.length()

解释

字典顺序

就是按abcd~xyz的顺序进行比较。

两字符串进行比较时,从下标索引为0开始比较,str1[0] 和 str2[0] 进行比较,str1[1] 和 str2[1] 进行比较,直至比出大小。

compareTo()

分为两种情况:

1. 两字符串存在相同索引下的值不同

2. 两字符串不存在相同索引下的值不同

两字符串存在相同索引下的值不同

其实比较的是ASCII值。

String str5 = "hello world";
String str6 = "aaa";
System.out.println(str5.charAt(0));
System.out.println(str6.charAt(0));
System.out.println(str5.charAt(0) - str6.charAt(0));
System.out.println(str5.compareTo(str6));

根据字典顺序比较,str5 和 str6 存在相同索引下的值不同的情况的最小索引为0,所以 str5.compareTo(str6) 的值等于 str5.charAt(0) - str6.charAt(0)。

两字符串不存在相同索引下的值不同

当两字符串不存在相同索引下的值不同的情况,即其中一串是另一串的子串时,调用 compareTo() 方法,会比较两字符串的长度,返回长度相减的值。

String str7 = "hello world";
String str8 = "hello";
System.out.println(str7.length());
System.out.println(str8.length());
System.out.println(str7.length() - str8.length());
System.out.println(str7.compareTo(str8));
System.out.println(str8.length() - str7.length());
System.out.println(str8.compareTo(str7));

参考:java jdk开发文档

  • 14
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值