字典上的字符串是什么?爪哇

Java中的compareTo()方法“按字典顺序”比较两个字符串.有人可以简单地解释一下字典比较在Java中是如何工作的吗?

我发现this post解释了< 0,== 0和> 0的三种情况;但是,我还是很困惑.

这是否意味着如果要像字典一样按字母顺序对字符串进行排序,则返回的int是字符串彼此隔开的位数?

另外,该方法如何处理区分大小写?小写字母排在大写字母之前吗?有图表吗?

例如,以下代码产生-31的输出.这是否意味着字符串Dog与字符串cat的距离为-31?

public static void main(String[] args) {
     Scanner keyboard = new Scanner(System.in);   

     String str1 = "Dog";

     String str2 = "cat";

     int result = str1.compareTo(str2);
     System.out.println(result);

解决方法:

返回的值并不重要,因为compareTo合同将返回负,正或0(您已经知道).

但是,如果您真的想了解将Dog与cat(或任何其他字符串)进行比较时为什么返回-31的原因,则可以直接在String类中直接查看该方法:

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;
}

请记住,值是支持字符串的char数组.

private final char value[];

那么这种方法如何进行呢?

>您可以在变量lim中检索两个字符串长度的最小值.
>您将创建两个字符串char数组的副本.
>循环遍历每个字符(验证它们是否相等),直到达到最低限制.
>如果同一索引处的两个字符不相等,则将第二个字符减去第一个字符的结果返回.字符可以表示为int值(采用其ascii值),并且已经被排序.因此,如果第二个字符比第一个字符“高”,则在减去负数时将返回负数.如果第二个字符比第一个字符“低”,将返回一个正数.如果两者相等,将返回0.
>如果循环最小字符串长度时所有字符均相等,则返回两个长度的减法.

在您的示例中,两个单词的首字母不相等,因此您将D与c进行比较,将c分别表示为68和99.将99减为68则得到-31.

所以要回答这个问题:

Does this mean that the int returned is the number of places away the
strings are form one another if they were to be sorted alphabetically
like a dictionary?

不,实际上是两个不匹配的char的ascii值之差或两个长度之差.

Also, how does the method deal with case sensitivity? Are lower case
letters first in line before uppercase? Is there a chart for this?

如果要在比较时忽略大小写,可以使用String#compareToIgnoreCase.

您也可以检查this chart的ascii值(大写和小写).

上一篇:在C#中从排序的字典中获取数据时出错


下一篇:字符串比较