我使用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;
}
}
答案 0 :(得分:0)
您的代码不会编译,因为您没有覆盖具有public boolean equals(Object obj)
另外,为了进行比较,您可以在修改后的等号中执行以下操作:
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:)