黑马程序员技术交流社区
标题:
字符串比较
[打印本页]
作者:
@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方法的实现代码,你就明白内部比较是什么机制了
public int compareTo(String anotherString) {
int len1 = count;
int len2 = anotherString.count;
int n = Math.min(len1, len2);
char v1[] = value;
char v2[] = anotherString.value;
int i = offset;
int j = anotherString.offset;
if (i == j) {
int k = i;
int lim = n + i;
while (k < lim) {
char c1 = v1[k];
char c2 = v2[k];
if (c1 != c2) {
return c1 - c2;
}
k++;
}
} else {
while (n-- != 0) {
char c1 = v1[i++];
char c2 = v2[j++];
if (c1 != c2) {
return c1 - c2;
}
}
}
return len1 - len2;
}
复制代码
作者:
陈文杰
时间:
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