private void refineWords() {
for(String word : words){
Log.i("word", word);
if (word == "s" || word == "t" || word == "am" || word == "is" || word == "are" || word == "was" || word == "were" || word == "has" ||
word == "have" || word == "been" || word == "will" || word == "be" || word == "would" || word == "should" || word == "shall" ||
word == "must" || word == "can" || word == "could" || word == "the" || word == "as" || word == "it" || word == "they" ||
word == "their" || word == "he" || word == "she" || word == "his" || word == "her" || word == "him" || word == "its" ||
word == "in" || word == "on" || word == "a" || word == "at") {
Log.i("step", "step Success!!");
words.remove(word);
}
}
}
我有一个名为“words”的列表,它包含字符串。这里Log.i适用于“word”标签,但“step”语句不会执行。似乎If条件不能正常工作。虽然“单词”列表包含类似的字符串,但是这种方法永远不会进入它。会有什么问题。请求帮助..
答案 0 :(得分:19)
您需要使用String.equals()
,而不是==
。 ==
检查两个Object
引用是否引用相同的Object
:
if("s".equals(word) || "t".equals(word) || ...
来自 Java语言规范3.0 的 15.21.3参考等式运算符==和!= 部分:
虽然==可用于比较String类型的引用,但这种相等 test确定两个操作数是否引用相同的String 宾语。如果操作数是不同的String对象,则结果为false,即使 它们包含相同的字符序列。两个字符串s和t的内容 可以通过方法调用s.equals(t)来测试相等性。
答案 1 :(得分:8)
正如其他人所说,你使用object.equals(otherObject)
来比较Java中的对象。
但你的方法完全错了。
尝试改为
Set stopWords = new HashSet(Arrays.asList("s", "t", "am",
"is", "are", "was", "were",
"has", "have", "been",
"will", "be", ...));
然后
private void refineWords() {
words.removeAll(stopWords);
}
你应该完成。
此外,请注意,使用当前代码,您将获得ConcurrentModificationException
,因为您在迭代时尝试更改集合。
因此,如果您无法使用上述words.removeAll(stopWords)
,则必须使用更详细的Iterator.remove()
方法:
private void refineWords() {
for (Iterator<String> wordsIterator = words.iterator(); wordsIterator.hasNext(); ) {
String word = wordsIterator.next();
if (stopWords.contains(word)) {
wordsIterator.remove();
}
}
}
答案 2 :(得分:3)
在java中,您需要将字符串与equals
进行比较:
if(word.equals("s") ...
答案 3 :(得分:1)
您可能希望使用equalsIgnoreCase(..)
方法进行更精细的改进。