compare To:
String的compareTo其实就是依次比较两个字符串ASC码。如果两个字符的ASC码相等则继续后续比较,否则直接返回两个ASC的差值。如果两个字符串完全一样,则返回0。来看一下代码。
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];
//如果两个字符的ASC不相同,则直接返回
if (c1 != c2) {
return c1 - c2;
}
k++;
}
} else {
while (n-- != 0) {
char c1 = v1[i++];
char c2 = v2[j++];
//如果两个字符的ASC不相同,则直接返回
if (c1 != c2) {
return c1 - c2;
}
}
}
//如果都一样,返回两个字符串的长度查
return len1 - len2;
}
根据上面的代码,我们可以很方便的计算吃两个字符串的comperTo的值:
abcd".compareTo("adef")== -2
"abc".compareTo("abcdef")== -3
"abc".compareTo("abc") == 0
应用的话可以看一下这道题,对字符串的字典序进行排序:实例
伪代码(升序):
for(int i=0;i<f;i++) {
for(int j=0;j<f-i-1;j++) {
if(q[j].sorce<q[j+1].sorce) {
w=q[j];
q[j]=q[j+1];
q[j+1]=w;
}
else if(q[j].sorce==q[j+1].sorce) {
if(q[j].name.compareTo(q[j+1].name)>0) {
w=q[j];
q[j]=q[j+1];
q[j+1]=w;
}
}
}
}
转载自:http://wobfei.iteye.com/blog/743123

本文详细解析了Java中String类的compareTo方法实现原理,通过源码分析,解释了两个字符串如何通过ASCII码值进行比较,以及在字符串排序中的具体应用。

2万+

被折叠的 条评论
为什么被折叠?



