不完全确定如何说出这个问题。 我正在写一个拼写检查程序,它从文本文件中读取单词。然后将这些单词添加到类型为
的ArrayList中ArrayList<String> dictionaryList = new ArrayList<String>();
现在,程序以无限循环运行(直到输入'q'),并提示用户搜索单词。如果找到该单词,程序将返回一个简单的“Found word”消息。
否则;获取搜索词并生成该词的变体。这些变体会添加到列表中:
ArrayList<String> allSimilarWords = new ArrayList<String>();
例如,“ coffei ”这个词会产生一系列“相似词”,其中一个是“咖啡”(英语中的一个词) 。
现在,看到我同时拥有所有字典单词的列表,以及相似单词的列表,程序会检查 allSimilarWords 中的单词是否包含在 dictionaryList <中/ strong>即可。
我检查了 generateSimilarWords -method,它按预期工作。
但是,在要求用户输入第二时间时会出现问题。第一次(输入“coffei”(其中咖啡在字典列表中)),程序产生以下输出:
Enter search term:
coffei
Suggestion for similar words:
-coffee
由于这是一个无限循环,程序会要求我输入另一个单词。现在,如果我输入“banaan”(其中 banana 在字典中),程序将生成以下输出:
Enter search term:
banaan
Suggestion for similar words:
-coffee
-banana
因此,除了单词“banana”之外,它“记得”我搜索 coffei ,并提供“咖啡”作为建议的单词。我一直试图弄清楚为什么会这样,但找不到我的错误。任何帮助将受到高度赞赏。以下是代码:
CODE
//GETTING SIMILAR WORD ARRAYLIST
public ArrayList<ArrayList<String>> getSimilarWords(String searchWord) {
this.searchWord = searchWord;
char[] wordAsCharacterArray = searchWord.toCharArray(); //Convert search String to a character array
//Call helper methods to add the suggested similar words to the similarWordArrayList
similarWordArrayList.add(charSwap(wordAsCharacterArray)); //Add swapped character suggestions
similarWordArrayList.add(charRemove(wordAsCharacterArray)); //Add removed character suggestions
similarWordArrayList.add(charAdd(wordAsCharacterArray)); //Add removed character suggestions
similarWordArrayList.add(charReplace(wordAsCharacterArray)); //Add removed character suggestions
return similarWordArrayList;
}
稍后将 similarWordArrayList “转换”为仅包含String元素的ArrayList,而不是类型为ArrayList&lt;的列表。的ArrayList&LT;字符串&gt; &GT;
//Method to generate and suggest similar words
private void suggestWords(ArrayList<ArrayList<String>> similarWords) {
allSimilarWords = convertSingleList(similarWords);
String currWord = "";
outer: for(int i = 0; i < allSimilarWords.size(); i++) { //Iterate through the list of similar words
currWord = allSimilarWords.get(i); //Set current similar word to a String variable
for(int j = 0; j < i; j++) {
if(currWord.equalsIgnoreCase(allSimilarWords.get(j))) {
continue outer;
}
}
if(myDictionaryList.contains(currWord)) {
System.out.println("-" + currWord);
}
}
}
查找字符串的方法:
public void findString(String word) {
searchTerm = word;
if(myDictionaryList.contains(word)) { //If found
System.out.println("Found word!"); //Notify
}
else {
//Find all similar words
System.out.println("Suggestions for similar words: ");
similarWords = handler.getSimilarWords(searchTerm);
suggestWords(similarWords);
}
}
有关如何解决此问题的任何帮助,以便程序仅根据最后搜索词打印出建议的单词(而不记住以前建议的单词),我们非常感谢。
答案 0 :(得分:1)
我认为,首先,您需要做的是在添加单词之前清除您的arraylist。
//GETTING SIMILAR WORD ARRAYLIST
public ArrayList<ArrayList<String>> getSimilarWords(String searchWord) {
this.searchWord = searchWord;
char[] wordAsCharacterArray = searchWord.toCharArray(); //Convert search String to a character array
//Clear the list before adding words
similarWordArrayList.clear();
//Call helper methods to add the suggested similar words to the similarWordArrayList
similarWordArrayList.add(charSwap(wordAsCharacterArray)); //Add swapped character suggestions
similarWordArrayList.add(charRemove(wordAsCharacterArray)); //Add removed character suggestions
similarWordArrayList.add(charAdd(wordAsCharacterArray)); //Add removed character suggestions
similarWordArrayList.add(charReplace(wordAsCharacterArray)); //Add removed character suggestions
return similarWordArrayList;
}