Java String.compareTo - 首先继续比较字符具有不同的值

时间:2017-11-17 13:31:14

标签: java string

我知道有一个String方法允许我比较两个字符串,称为compareTo。我试图写一个这种方法的修改版本。我的问题是,当找到2个字符之间的差异时,我的方法停止。例如:

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,因为角色&#39; B&#39;在字符集中等于66,并且&#39; A&#39;等于65 - &gt; 66 - 65 = 1.这意味着String str1大于str2。

如果我更改了字符串并为它们两个添加了一个字符,那么字符索引1之后的剩余字符,在我的情况下&#39; A&#39;和&#39; B&#39;,不会被比较。

这是更新后的主页,它会给我与前一个相同的结果。

    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处的字符(&#39; A&#39)和&#39; B&#39;)将不会被比较。

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

有人可以解释我如何修改我的功能,所以其他字符将包含在比较中吗?

谢谢。

2 个答案:

答案 0 :(得分:1)

问题是,一旦找到差异,你就会回来

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

相反,为了继续计算,你需要一个和变量

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

答案 1 :(得分:0)

遍历字符串中的字符。 在他们不匹配的地方,存储差异。 最后返回总差异。