我已经写了下面的代码
import java.util.*;
class compare{
public static void main(String []args){
String s1="java";
String s2="javaProgramming";
System.out.println(s1.compareTo(s2));
}
}此代码的输出为-11。由于java中没有终止字符串的字符,所以将"java“中的哪个字符与"javaProgramming”中的“P”进行比较?
发布于 2020-02-18 13:01:31
'P‘字符不能与第一个String中的任何字符相比较。
它只比较两个字符串的前4个字符,它们是相等的。
然后返回第一个字符串的长度减去第二个字符串的长度。
public int compareTo(String anotherString) {
int len1 = value.length;
int len2 = anotherString.value.length;
int lim = Math.min(len1, len2);
char v1[] = value;
char v2[] = anotherString.value;
int k = 0;
while (k < lim) {
char c1 = v1[k];
char c2 = v2[k];
if (c1 != c2) {
return c1 - c2;
}
k++;
}
return len1 - len2;
}由于第二个String更长,第一个String包含在第二个,所以返回任何负值都可以,因为较短的String应该按字典顺序排在第一位。
发布于 2020-02-18 13:03:38
让我们看看javadocs是怎么说的
按字典顺序比较两个字符串。比较基于字符串中每个字符的Unicode值。将此字符串对象表示的字符序列按字典顺序与由参数字符串表示的字符序列进行比较。如果这个字符串对象按字典顺序位于参数字符串之前,则结果是一个负整数。如果这个字符串对象按字典顺序跟随参数字符串,则结果是一个正整数。如果字符串相等,则结果为零;当equals(Object)方法返回true时,compareTo准确地返回0。 这是词典顺序的定义。如果两个字符串是不同的,那么它们在某个索引处有不同的字符,这是两个字符串的有效索引,或者它们的长度不同,或者两者都不同。如果它们在一个或多个索引位置上有不同的字符,则设k是最小的这样的索引;那么其在位置k处的字符的值较小的字符串,如使用<运算符所确定的,按字典顺序排在另一个字符串之前。在本例中,compareTo返回两个字符值在两个字符串中的位置k处的差值--即值: this.charAt(k)-anotherString.charAt(k) 如果没有索引位置不同,那么较短的字符串在词汇学上先于较长的字符串。在本例中,compareTo返回字符串长度的差异-即值: this.length()-anotherString.length()
https://stackoverflow.com/questions/60281474
复制相似问题