大家好,我的问题有点容易
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)
答案 0 :(得分:2)
答案 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