黑马程序员技术交流社区

标题: 字符串比较 [打印本页]

作者: @ne_pie尒ce    时间: 2013-11-20 19:51
标题: 字符串比较
      String s1="";
      String s2="a";
      String s3="b";
      String s4="ab";
      int i1=s1.compareTo(s2);
      int i2=s2.compareTo(s3);
      int i3=s3.compareTo(s4);
      System.out.println(i1);
      System.out.println(i2);
      System.out.println(i3);
这里有空字符串与单个字符串是怎么比较的,
单个字符的字符串是怎么比较的,
单字符字符串与多字符字符串又是怎么比较的


作者: 赵许星    时间: 2013-11-20 19:55
看一看下面的CompareTo方法的实现代码,你就明白内部比较是什么机制了
  1.     public int compareTo(String anotherString) {
  2.         int len1 = count;
  3.         int len2 = anotherString.count;
  4.         int n = Math.min(len1, len2);
  5.         char v1[] = value;
  6.         char v2[] = anotherString.value;
  7.         int i = offset;
  8.         int j = anotherString.offset;

  9.         if (i == j) {
  10.             int k = i;
  11.             int lim = n + i;
  12.             while (k < lim) {
  13.                 char c1 = v1[k];
  14.                 char c2 = v2[k];
  15.                 if (c1 != c2) {
  16.                     return c1 - c2;
  17.                 }
  18.                 k++;
  19.             }
  20.         } else {
  21.             while (n-- != 0) {
  22.                 char c1 = v1[i++];
  23.                 char c2 = v2[j++];
  24.                 if (c1 != c2) {
  25.                     return c1 - c2;
  26.                 }
  27.             }
  28.         }
  29.         return len1 - len2;
  30.     }
复制代码

作者: 陈文杰    时间: 2013-11-20 20:27
要弄明白compareto的比较机制

compareTo()的返回值是整型,它是先比较对应字符的大小(ASCII码顺序),如果第一个字符和参数的第一个字符不等,结束比较,返回他们之间的

差值,如果第一个字符和参数的第一个字符相等,则以第二个字符和参数的第二个字符做比较,以此类推,直至比较的字符或被比较的字符有一方

全比较完,这时就比较字符的长度.

例:
String s1 = "abc";
String s2 = "abcd";
String s3 = "abcdfg";
String s4 = "1bcdfg";
String s5 = "cdfg";
System.out.println( s1.compareTo(s2) ); // -1 (前面相等,s1长度小1)
System.out.println( s1.compareTo(s3) ); // -3 (前面相等,s1长度小3)
System.out.println( s1.compareTo(s4) ); // 48 ("a"的ASCII码是97,"1"的的ASCII码是49,所以返回48)
System.out.println( s1.compareTo(s5) ); // -2 ("a"的ASCII码是97,"c"的ASCII码是99,所以返回-2)

s1.compareTo(s1.intValue())>0;//此方法判断是否为整型
作者: smileven    时间: 2013-11-20 20:31
Stirng的compareTo()方法是这样比较的:
从两个字符串的0位置开始比较:
(1) 如果两个字符串上第一个位置的字符不相等,
      那么就不再进行比较,这两个字符串肯定不相等。
(2)如果两个字符串上第一个位置的字符相当,
      那么就接着找他们各自的第二字字符,如此直到最后一个字符都相等,那么这两个字符串就相等。
      如果中间有一个字符不相等,那么后面的字符都不会再进行比较,结果也就是这两个字符串不相等。
(3)如果两个字符串长度不一样,但是短的字符串和长字符串的前半部完全一样,
      那么长字符串取下一个字符时短字符串没有可取的字符,那么他们肯定就不相等。

这三种情况就可以说明你问的问题了~~





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