gpt4 book ai didi

Java String.compareTo - 即使字符最初具有不同的值,也继续比较

转载 作者:行者123 更新时间:2023-12-02 11:59:50 26 4
gpt4 key购买 nike

我知道 String 有一个方法可以让我比较两个字符串,称为compareTo。我试图编写此方法的修改版本。我的问题是,当发现两个字符之间存在差异时,我的方法就会停止。例如:

public static int stringCompare(String s1, String s2) {
int i = 0, n1, n2;
while(true) {
if (s1.length() <= i && s2.length() <= i) {
return 0;
} else if (s1.length() <= i) {
return -s2.charAt(i);
} else if (s2.length() <= i) {
return s1.charAt(i);
} else {
n1 = s1.charAt(i);
n2 = s2.charAt(i);
if (n1 != n2) {
i++;
return n1 - n2;
} else {
i++;
}
}
}
}

我的主要内容如下:

    public static void main(String[] args) {
String str1 = "AB";
String str2 = "AA";
System.out.print(stringCompare(str1, str2));
}

比较结果为 1,因为字符 'B' 在字符集中等于 66,而 'A' 等于 65 -> 66 - 65 = 1。这意味着字符串 str1 大于 str2。

如果我更改字符串并向它们都添加一个字符,则不会比较字符索引 1 之后的剩余字符(在本例中为“A”和“B”)。

这是更新后的 main,它将给出与之前相同的结果。

    public static void main(String[] args) {
String str1 = "ABA";
String str2 = "AAB";
System.out.print(stringCompare(str1, str2));
}

即使两个字符串的值都等于 0 ((65 + 66 + 65) - (65 + 65 + 66)),结果也是 1,因为字符串索引 2 处的字符('A' 和 'B' )不会进行比较。

字符串的实例方法给了我相同的结果。即使我使用 str.compareTo(str) 方法,比较的值也是 1。

谁能解释一下如何修改我的函数,以便将其他字符包含在比较中?

谢谢。

最佳答案

问题是一旦发现差异,您就会返回

if(n1 != n2)
{
i++;
return n1 - n2;
}

相反,为了继续计算,您需要一个 sum 变量

int sum = 0; //at the start of the method
[...]
if(n1 != n2)
{
i++;
sum += n1 - n2;
}
[...]
return sum; //at the end of the method

这可以做得更干净一点

int stringCompare(String a, String b)
{
int sum = 0;
for(int i = 0; i < a.length() && i < b.length(); i++)
sum += a.charAt(i) - b.charAt(i);
return sum;
}

如果考虑到所有字符,您可以在之后循环多余的字符

int stringCompare(String a, String b)
{
int sum = 0;
for(int i = 0; i < a.length() && i < b.length(); i++)
sum += a.charAt(i) - b.charAt(i);
for(int i = b.length(); i < a.length(); i++)
sum += a.charAt(i);
for(int i = a.length(); i < b.length(); i++)
sum -= b.charAt(i);
return sum;
}

或者求和并减去

int stringCompare(String a, String b)
{
int sum = 0;
for(int i = 0; i < a.length(); i++)
sum += a.charAt(i);
for(int i = 0; i < b.length(); i++)
sum -= b.charAt(i);
return sum;
}

关于Java String.compareTo - 即使字符最初具有不同的值,也继续比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47351803/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com