尝试从LinkedList中删除一些单词。这是我用于测试的数据:
String[] stopwords = {"the","and"};
nwl = LinkedList<String>(Arrays.asList(input));
String input = "the and of the "
我希望获得的结果是:[of]
但我得到的是:[the, end, of, the]
。
for (Iterator<String> iter = nwl.iterator(); iter.hasNext();) {
String word = iter.next();
for (int i = 0; i < nwl.size(); i++){
if(word == stopwords[i]) {
iter.remove();
}
}
}
答案 0 :(得分:1)
比较字符串时,您需要使用.equals()
方法,而不是==
运算符。因此,您需要将if (word == stopwords[i])
更改为if(word.equals(stopwords[i]))
。
更长的版本:
粗略地说,==
运算符确定两个变量是否指向同一个对象(在我们的例子中:word
和stopwords[i]
是否指向同一个字符串对象)。 .equals()
方法确定两个对象是否相同(内容明确)。如果您的情况,程序无法生成所需的输出,因为您有两个不同的字符串保持相同的内容。因此,通过==
比较它们会产生false
,而通过.equals()
进行比较会产生“真”。
修改强>
阅读链接中发布的程序后,我发现了以下几点:首先,内部for循环的条件必须更改为i < stopwords.length
。其次,newWordList
对象未正确初始化。它是新的LinkedList<String>(Arrays.asList(parts))
,这意味着LinkedList
将包含一个值为the and of the
的String元素,这不是您想要的。您希望LinkedList
包含四个字符串元素,如下所示:
the
and
of
the
因此初始化需要更改为new LinkedList<String>(
Arrays.asList(parts.split(" ")))
。具体来说,parts.split(" ")
将给定字符串(split
)分解为单独的单词,返回这些单词的数组。
public static void main (String[] args) throws java.lang.Exception
{
String[] stopwords = { "the", "and" };
String parts = "the and of the";
LinkedList<String> newWordList = new LinkedList<String>(
Arrays.asList(parts.split(" ")));
for (Iterator<String> iter = newWordList.iterator(); iter.hasNext();) {
String word = iter.next();
for (int i = 0; i < stopwords.length; i++) {
if (word.equals(stopwords[i])) {
iter.remove();
}
}
}
System.out.println(newWordList.toString());
}