我正在尝试查看如何在比较字符串时手动计算输出,就像我正在练习的过去论文中提出的问题一样。
据我所知,如果字符串按字典顺序(根据unicode)在参数字符串之前,结果为负,如果跟在它之后则为正,如果它们相等则为零。我不知道如何计算价值(超出标志)。
我有代码给出输出1,-1,-3,3。我知道为什么每个都是正面或负面但不是为什么它是1或3。
public class CompareToPractice {
public static void main(String[] args) {
String str1 = "bode";
String str2 = "bod";
String str3 = "bodge";
String str4 = "bog";
int result1 = str1.compareTo(str2);
System.out.println(result1);
int result2 = str2.compareTo(str1);
System.out.println(result2);
int result3 = str3.compareTo(str4);
System.out.println(result3);
int result4 = str4.compareTo(str3);
System.out.println(result4);
}
}
谢谢
答案 0 :(得分:5)
它是人物之间的差异' d'并且' e' (ascii差异)。
这是compareTo
的代码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;
}
从行if (c1 != c2)
可以看出。如果2个字符不相等,则结果将是这2个值的减法。
在你的情况下str3.compareTo(str4)
是&#34; bodge&#34; - &#34; bog&#34;。
所以&#39; d&#39;&#39; g&#39; (ASCII值:100 - 103 = -3)
答案 1 :(得分:2)
我没有看到如何计算价值(超出标志)。
“超出标志”的价值无关紧要。它没有传达正常应用程序可以使用 1 的信息。这仅仅是一个实现细节:一个针对速度优化的算法的偶然伪像。
如果您真的想知道,请查看source code。
1 - 我想你在理论上可以构建一个使用它的程序。但我无法想象这样一个程序会解决的问题......除了循环问题,例如调查compareTo
的统计特性!
答案 2 :(得分:2)
compareTo
的文档清楚地定义了在何种情况下计算结果以及如何计算结果。
这是词典排序的定义。如果两个字符串不同,则它们在某个索引处具有不同的字符,这两个字符串是两个字符串的有效索引,或者它们的长度不同,或两者都有。如果它们在一个或多个索引位置具有不同的字符,则令k为最小的索引;然后,通过使用&lt;来确定位置k处的字符具有较小值的字符串。运算符,按字典顺序排在另一个字符串之前。在这种情况下,compareTo返回两个字符串中位置k处两个字符值的差值 - 即值:
this.charAt(k)-anotherString.charAt(k)
如果没有它们不同的索引位置,则更短 字符串按字典顺序排在较长的字符串之前。在这种情况下, compareTo返回字符串长度的差异 - 即 是,值:
this.length()-anotherString.length()
Bandi Kishore的回答也解释了ASCII差异计算:https://stackoverflow.com/a/36858565/904375