如何搜索字符串

时间:2015-10-16 14:38:03

标签: java arraylist

我正在开展一项任务,我必须在文本中计算单词。我创建了一个ArrayList<Word>,其中包含Word个等号。当我扫描文本时,如果列表中不存在,我只应该向ArrayList添加一个单词。如果它存在,我将使用方法.increasNumber()增加值。我该怎么做?

public ArrayList<Word> list = new ArrayList<Word>();

public void readBook(String fileName) throws Exception {
    String fileRead = fileName;
    Scanner file = new Scanner(new File(fileRead));
    while(file.hasNextLine()) {
        addWord(file.nextLine());
    }
}

private void addWord(String word) {
    if (list.contains(word)) {
        word.increasNumber);
    } else {
        list.add(new Word(word));
    }
}

以下是我的Word课程:

public class Word {
    String text;
    int count = 0;

    public Word(String text) {
        this.text = text;
    }

    public String toString() {
        return text;
    }

    public int getNumber() {
        return count;
    }

    public void increasNumber() {
        count++;
    }
}

2 个答案:

答案 0 :(得分:0)

请勿使用List,使用Map<String,Integer>,其中键是您的单词,值是出现次数。

Map<String,Integer> map = new HashMap<>();
Integer count = map.get(word);
if (count == null) {
  map.put(word, 1);
} else {
  map.put(word, count+1);
}

编辑:我误读了你的OP,@ gonzo的评论是对的;)

答案 1 :(得分:0)

您应该重写addWord()方法:

List<Word> words = new ArrayList<>();

private void addWord(String word) {
    Word w = new Word(word);
    int i = words.indexOf(w);
    if (i >= 0) {
        words.get(i).increaseNumber();
    } else {
        words.add(w);
    }
}

要完成这项工作,您还需要覆盖Word#equalshashCode仅基于内部内容(例如,如果word1.equals(word2)和{{1} word1应该返回true两者都基于相同的字符串)。