不区分大小写的字符串数组比较

时间:2014-11-24 07:37:11

标签: java arrays eclipse string case-sensitive

我使用Java进行编码,我很清楚我可以将大多数数组与Arrays.equals进行比较,我可以将字符串不敏感地与String.equalsIgnoreCase进行比较,但有没有办法专门比较字符串数组案例不敏感?

示例代码:

class Foo {
    String[] array; // don't care about case

    @Override
    public boolean equals(Foo obj) {
        // bunch of stuff to check equality
        if (!Arrays.equals(array, obj.array)) return false; // case insensitive?
        return true;
    }
}

2 个答案:

答案 0 :(得分:0)

您的代码不会编译,因为您没有覆盖具有public boolean equals(Object obj)

等签名的Object的equals方法

另外,为了进行比较,您可以在修改后的等号中执行以下操作:

if (array == foo.array) {
    return true;
}

if (array == null || foo.array == null) {
    return false;
}

int length = array.length;

if (foo.length != length)
        return false;

    for (int i=0; i<length; i++) {
        String string1 = array[i];
        String string2 = foo.array[i];
        if (!(string1==null ? string2==null : string1.equalsIgnoreCase(string2)))
            return false;
    }
return true;

答案 1 :(得分:0)

对于类似的东西,我保留了一个Utility类,我定义了一个静态比较器方法(作为String [],不区分大小写的比较不是特定于类型的逻辑,可以在程序中的其他地方重用)。

public static boolean caseInsensitiveCompare(String[] array1, String[] array2) {
    // validate arguments
    condition(allNotNullOrEmpty(array1) && allNotNullOrEmpty(array2));

    if (array1 == array2) return true;
    if (array1.length != array2.length) return false;

    for (int i = 0; i < array1.length; i++) {
        if (!array1[i].equalsIgnoreCase(array2[i])) return false;
    }

    return true;
}

P.S。而不是写这个

if (!Arrays.equals(array, obj.array)) return false; // case insensitive?
    return true;

写这个

return !Arrays.equals(array, obj.array);

或使用Intellij:)