Java 手动计算从字符串比较器到字符串的输出
我试图了解如何在比较字符串时手动计算输出,就像我在练习的以前的论文中提出的问题一样 我知道,如果字符串按字典顺序(根据unicode)在参数字符串之前,则结果为负;如果参数字符串之后,则结果为正;如果参数字符串相等,则结果为零。我不知道如何计算这个值(符号之外) 我有一个代码,它给出了输出1,-1,-3,3。我明白为什么每个都是正的或负的,但不明白为什么是1或3Java 手动计算从字符串比较器到字符串的输出,java,string,compareto,Java,String,Compareto,我试图了解如何在比较字符串时手动计算输出,就像我在练习的以前的论文中提出的问题一样 我知道,如果字符串按字典顺序(根据unicode)在参数字符串之前,则结果为负;如果参数字符串之后,则结果为正;如果参数字符串相等,则结果为零。我不知道如何计算这个值(符号之外) 我有一个代码,它给出了输出1,-1,-3,3。我明白为什么每个都是正的或负的,但不明白为什么是1或3 public class CompareToPractice { public static void main(String
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);
}
}
谢谢这是字符“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;
}
public int compareTo(字符串另一个字符串){
int len1=value.length;
int len2=另一个string.value.length;
int lim=Math.min(len1,len2);
字符v1[]=值;
char v2[]=另一个string.value;
int k=0;
while(k
正如您从第行看到的,如果(c1!=c2)
。如果两个字符不相等,则结果将是这两个值的减法。在你的例子中,str3.compareTo(str4)是“bodge”-“bog”
因此'd'-'g'(ASCII值:100-103=-3)这是字符'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;
}
public int compareTo(字符串另一个字符串){
int len1=value.length;
int len2=另一个string.value.length;
int lim=Math.min(len1,len2);
字符v1[]=值;
char v2[]=另一个string.value;
int k=0;
while(k
正如您从第行看到的,如果(c1!=c2)
。如果两个字符不相等,则结果将是这两个值的减法。在你的例子中,str3.compareTo(str4)是“bodge”-“bog”
So'd'-'g'(ASCII值:100-103=-3) 我不知道如何计算这个值(符号之外) “超出符号”的值是不相关的。它不传递普通应用程序可以使用1的任何信息。这仅仅是一个实现细节:一个为速度而优化的算法的偶然产物 如果你真的想知道的话,看看下面的例子
我想你可以在理论上构造一个使用它的程序。但我想不出这样一个计划能解决什么问题。。。除了循环问题之外,例如调查
的统计特性比较到
我不知道如何计算这个值(符号之外)
“超出符号”的值是不相关的。它不传递普通应用程序可以使用1的任何信息。这仅仅是一个实现细节:一个为速度而优化的算法的偶然产物
如果你真的想知道的话,看看下面的例子
我想你可以在理论上构造一个使用它的程序。但我想不出这样一个计划能解决什么问题。。。除了循环问题之外,例如调查的统计特性比较到 compare to
的文档清楚地定义了在什么情况下计算结果以及如何计算结果
这是词典排序的定义。如果两个字符串不同,则要么它们在某个索引处具有不同的字符,该索引是两个字符串的有效索引,要么它们的长度不同,要么两者都不同。如果它们在一个或多个索引位置具有不同的字符,则k是此类索引的最小值;然后,使用<运算符确定其在位置k处的字符具有较小值的字符串按字典顺序位于另一个字符串之前。在本例中,compareTo返回两个字符串中位置k处两个字符值的差值,即:
this.charAt(k)-另一个string.charAt(k)
如果没有不同的索引位置,则较短的
字符串按字典顺序位于较长字符串之前。在这种情况下,,
compareTo返回字符串长度之差,即
是,值为:
this.length()-另一个String.length()
Bandi Kishore的回答还解释了ASCII差异计算:compareTo
的文档清楚地定义了在什么情况下计算结果以及如何计算结果
这是词典排序的定义。如果两个字符串不同,则要么它们在某个索引处具有不同的字符,该索引是两个字符串的有效索引,要么它们的长度不同,要么两者都不同。如果它们在一个或多个索引位置具有不同的字符,则k是此类索引的最小值;然后,使用<运算符确定其在位置k处的字符具有较小值的字符串按字典顺序位于另一个字符串之前。在本例中,compareTo返回两个字符串中位置k处两个字符值的差值,即:
this.charAt(k)-另一个string.charAt(k)
如果没有不同的索引位置,则较短的
字符串按字典顺序位于较长字符串之前。在这种情况下,,
compareTo返回字符串长度之差,即
是,值为:
this.length()-另一个String.length()
Bandi Kishore的回答还解释了ASCII差异计算:根据合同,只有符号才重要。如果您对实际实现感到好奇,只需看看。您所说的“合同”shmosel是什么意思?可比的文档