集合的差异

时间:2016-01-12 16:46:30

标签: java

大家好,我的问题有点容易

public static Set<String> edits(String word) {
    Set<String> edits = new HashSet<String>();
    List<SplitWord> splits = SplitWord.allSplits(word);
    for (SplitWord split: splits) {
        String a = split.prefix;
        String b = split.suffix;
        int lb = b.length();
        if (lb > 0) {
            edits.add(a + b.substring(1)); // delete
            for (int i = 0; i < ALPHABET.length(); ++i)
                edits.add(a + ALPHABET.charAt(i) + b.substring(1)); // replace
        }
        if (lb > 1)
            edits.add(a + b.charAt(1) + b.charAt(0) + b.substring(2)); // transpose
        for (int i = 0; i < ALPHABET.length(); ++i)
            edits.add(a + ALPHABET.charAt(i) + b); // insert
    }
    return edits;
}
public static Set<String> edits2(String word){//Double Edits according to norvig's spell corrector. Recursive way.
    Set<String> firstSet = new HashSet<String>();
    Set<String> secondSet= new HashSet<String>();

    firstSet.addAll(edits(word));
    for(String w: editsn){
            secondSet.addAll(edits(w));
            if(secondSet.contains(edits1(word))){
                secondSet.remove(w);
            }
    }

    return secondSet;
}

以下是我的两种方法,我的“编辑”方法仅针对一个拼写错误检查拼写错误。例如,如果你写(atson)它说(沃森)。我以递归的方式使用“编辑”功能来检查双重拼写错误(例如tson到watson)。它工作,但我的secondSet包含firstSet,所以它也打印一个拼写错误。我尝试删除元素,但它不起作用。那么如何打印两套的差异呢? (数学A-B)

3 个答案:

答案 0 :(得分:2)

您可以将此方法用于两组差异

removeAll(java.util.Collection)

重要说明:这会改变您在

上调用removeAll的集合

答案 1 :(得分:1)

示例:

假设你有List包含一些单词;

// List declaration;
List<String> words = new ArrayList<String>();

// Populate list;
words.add("one");
words.add("two");
words.add("three");

你有两套;

// Set declaration; 
Set<String> setA = new HashSet<String>();
Set<String> setB = new HashSet<String>();

让我们用我们之前定义的列表中的单词填充我们的集合,并为其中一个集合添加一个独占单词;

setA.addAll(words);
setB.addAll(words);
setA.add("four");

现在我们要删除两个集合中的元素

setA.removeAll(setB);

输出结果:

System.out.println(setA);

答案 2 :(得分:1)

使用番石榴也很容易,无论如何,大多数人都会在他们的班级道路上。

final HashSet<String> set1 = Sets.newHashSet("A", "B");
final HashSet<String> set2 = Sets.newHashSet("B", "C");
final Sets.SetView<String> difference = Sets.difference(set1, set2); // contains A only