【问题标题】:Remove previous String entries删除以前的字符串条目
【发布时间】:2014-10-01 09:20:35
【问题描述】:

不完全确定如何表达这个问题。 我正在编写一个拼写检查程序,它从文本文件中读取单词。然后将这些单词添加到 ArrayList 类型:

ArrayList<String> dictionaryList = new ArrayList<String>();

现在,程序以无限循环的形式运行(直到输入“q”),并提示用户搜索单词。如果可以找到单词,程序会返回一个简单的“找到单词”消息。

否则;获取搜索词并生成该词的变体。这些变体已添加到列表中:

ArrayList<String> allSimilarWords = new ArrayList<String>();

例如,“coffei”这个词会生成一系列“相似词”,其中一个是“coffee”(英语中的一个词) .

现在,看到我拥有所有字典单词的列表以及相似单词的列表,程序检查 allSimilarWords 中的单词是否包含在 dictionaryList。

我检查了我的 generateSimilarWords 方法,它按预期工作。

但是,在第二次要求用户输入时出现问题。第一次(键入“coffei”(coffee 在字典列表中)),程序产生以下输出:

Enter search term: 
coffei
Suggestion for similar words: 
-coffee

由于这是一个无限循环,程序要求我输入另一个单词。现在,如果我输入“banaan”(banana 在字典中),程序会产生以下输出:

Enter search term: 
banaan
Suggestion for similar words: 
-coffee
-banana

因此,它会“记住”我搜索 coffei,并在“banana”一词之外提供“coffee”作为建议词。我一直试图弄清楚为什么会发生这种情况,但找不到我的错误。任何帮助将不胜感激。以下是代码:

代码

//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 > 类型的列表。

//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);
    }
}

任何有关我如何解决此问题的帮助,以便程序仅根据最后一个搜索词打印出建议的单词(并且不记得以前建议的单词),非常感谢。

【问题讨论】:

  • 你能告诉我最终输出是哪个变量吗?

标签: java search arraylist


【解决方案1】:

我认为,您要做的第一件事是在向其添加单词之前清除您的数组列表。

//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;
}

【讨论】:

  • 感谢您的建议。但是,在输入第二个搜索词时,它仍然给了我之前建议的词。 :S
  • 但是@DirkNm 建议的方式就是这样做的方式。可能地方会不一样。但是你必须在形成这些词之前清除列表。
  • 非常感谢你们!它帮助我意识到我必须清除 ArrayList allSimilarWords(在SuggestWords()方法中)。
猜你喜欢
  • 2013-06-19
  • 2017-09-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多