我有两个arraylist fileWordList和stopWordList。我想将fileWordList与stopWordList进行比较,并从fileWordList中删除任何相同的单词。我的代码如下:
ArrayList<String> fileWordList = new ArrayList<String>();
ArrayList<String> stopWordList = new ArrayList<String>();
for (Iterator<String> i = fileWordList.iterator(); i.hasNext(); ) {
for(Iterator<String> j = stopWordList.iterator(); j.hasNext();){
if (j.next() == i.next()){
i.remove();
}
}
}
错误是由以下原因引起的:java.util.NoSuchElementException。怎么解决这个?代码有什么问题?
答案 0 :(得分:4)
您正在多次致电i.next()
。你应该在外循环的每次迭代中调用它一次并记住结果。
for (Iterator<String> i = fileWordList.iterator(); i.hasNext(); ) {
String s = i.next();
for(Iterator<String> j = stopWordList.iterator(); j.hasNext();){
if (j.next() == s){ // consider using equals here
i.remove();
break; // No need to continue checking.
}
}
}
我怀疑你想用j.next().equals(s)
来比较两个字符串是否相等。
您可能还想考虑使用ArrayList.contains
。或使用HashSet
存储您的停用词,因为您可能不关心它们的存储顺序。
答案 1 :(得分:1)
为什么不使用ArrayList contains()
方法而不是嵌套循环?
for (Iterator<String> i = fileWordList.iterator(); i.hasNext(); ) {
String word = i.next();
// Only removes first occurence.
if (stopWordList.contains(word)) {
i.remove();
}
}
// Better and simpler solution
for (String word : stopWordList) {
while(fileWordList.contains(word)) {
fileWordList.remove(word);
}
}
答案 2 :(得分:0)
for(String word : stopWordList)
if(fileWordList.contains(word))
fileWordList.remove(word)