Java Set<String>相等忽略大小写

2022-09-01 11:36:24

我想通过忽略字母的大小写来检查两组String的所有元素是否相等。

Set<String> set1 ;
Set<String> set2 ;
.
.
.
if(set1.equals(set2)){ //all elements of set1 are equal to set2 
 //dosomething
}
else{
 //do something else
}

但是,此相等性检查不会忽略字符串的大小写。有没有其他方法可以做到这一点?


答案 1

或者,您可以使用 .TreeSet

public static void main(String[] args){
    Set<String> s1 = new TreeSet<String>(String.CASE_INSENSITIVE_ORDER);
    s1.addAll(Arrays.asList(new String[] {"a", "b", "c"}));

    Set<String> s2 = new TreeSet<String>(String.CASE_INSENSITIVE_ORDER);
    s2.addAll(Arrays.asList(new String[] {"A", "B", "C"}));

    System.out.println(s1.equals(s2));
}

答案 2

不幸的是,Java不允许您提供外部的“相等比较器”:当您使用字符串时,仅使用内置和.HashSethashCodeequals

您可以通过使用转换为特定(即大写或小写)的字符串填充辅助词,然后检查其相等性来解决此问题,如下所示:HashSet<String>

boolean eq = set1.size() == set2.size();
if (eq) {
    Set<String> aux = new HashSet<String>();
    for (String s : set1) {
        aux.add(s.toUpperCase());
    }
    for (String s : set2) {
        if (!aux.contains(s.toUpperCase())) {
            eq = false;
            break;
        }
    }
}
if (eq) {
    // The sets are equal ignoring the case
}

推荐