黑马程序员技术交流社区

标题: 字符串compareTo()方法问题 [打印本页]

作者: 新航向    时间: 2014-8-15 22:56
标题: 字符串compareTo()方法问题
本帖最后由 新航向 于 2014-8-16 08:14 编辑

"aBcdeFGcd"和"aB"比结果为何为8?   个人理解:由于“aB”双方相同,需要比较第三个字符,应该是"c"和空字符""比较。
  然而根据ASCII表,"c"对应99,根据结果为8计算,与"c"比较的是"["(ASCII值为91),为什么呢?
  1. class StringDemo
  2. {
  3.       public static void main(String[] args)
  4.       {
  5.           String s="  aBcdeFGcds   ";
复制代码





08-15_15.png (132.5 KB, 下载次数: 127)

08-15_15.png

作者: hsy    时间: 2014-8-15 23:25
public int compareTo(String anotherString)按字典顺序比较两个字符串。该比较基于字符串中各个字符的值。

语法:
Str1.compareTo(Str2);

其返回的是一个int类型值。若Str1等于参数字符串Str2字符串,则返回0;若该Str1按字典顺序小于参数字符串Str2,则返回值小于0;若Str1按字典顺序大于参数字符串Str2,则返回值大于0。再不理解的话就试着看源码吧

作者: inception    时间: 2014-8-16 00:12
看一看。。。。
作者: 新航向    时间: 2014-8-16 07:41
本帖最后由 新航向 于 2014-8-16 08:14 编辑
hsy 发表于 2014-8-15 23:25
public int compareTo(String anotherString)按字典顺序比较两个字符串。该比较基于字符串中各个字符的值。 ...

知道了,多谢解答
作者: 黎志勇    时间: 2014-8-16 07:54
根据源码,如果前面部分都相同的话,会返回两者长度之差。
  1.     public int compareTo(String anotherString) {
  2.         int len1 = value.length;
  3.         int len2 = anotherString.value.length;
  4.         int lim = Math.min(len1, len2);
  5.         char v1[] = value;
  6.         char v2[] = anotherString.value;

  7.         int k = 0;
  8.         while (k < lim) {
  9.             char c1 = v1[k];
  10.             char c2 = v2[k];
  11.             if (c1 != c2) {
  12.                 return c1 - c2;
  13.             }
  14.             k++;
  15.         }
  16.         return len1 - len2;
  17.     }
复制代码




作者: 新航向    时间: 2014-8-16 08:14
黎志勇 发表于 2014-8-16 07:54
根据源码,如果前面部分都相同的话,会返回两者长度之差。

哦,原来源码中都写着的。。惭愧惭愧
多谢解答
作者: 布鲁图斯    时间: 2014-8-16 15:31
查看一下JDK API 关于 String类的compareTo方法介绍:
如果没有字符不同的索引位置,则较短字符串的字典顺序在较长字符串之前。在这种情况下,compareTo 返回这两个字符串长度的差,即值:
this.length()-anotherString.length()





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2