我正在开展一项任务,我必须在文本中计算单词。我创建了一个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++;
}
}
答案 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#equals
和hashCode
仅基于内部内容(例如,如果word1.equals(word2)
和{{1} word1
应该返回true两者都基于相同的字符串)。