我正在尝试删除数组中包含超过7个字母且小于5的所有内容。
程序运行但不会删除超过7个字母且少于5个字母的单词。
我使用了一个迭代器来读取数组,但它似乎忽略了if语句
Iterator<String> it = muligeOrd.iterator();
while (it.hasNext()) {
if(it.next().length()<=5 && it.next().length()>=7){
it.remove();
}
}
答案 0 :(得分:2)
好的,我们在一行中有两个主要问题
if(it.next().length()<=5 && it.next().length()>=7){
.next()
将移动光标,因为您使用的是&&
,如果对象的长度为&lt; = 5,则下一次调用会将光标移动到集合中的下一个对象;这可能不是你想要的。
如果不是你想要的东西,并且你想要查找相同的对象,那么它的长度如何同时> 7和<5?
尝试使用此功能,移动光标一次并获取对象,然后将&&
更改为||
,这将删除任何长度不完全为6个字符的内容。
String something = it.next();
if( something.length() <= 5 || something.length() >= 7 ) {
it.remove();
}
在你的帖子中你也说
该程序运行但它不会删除超过7个字母且少于5个字母的单词。
对我而言,这意味着您要保留所有包含5个,6个或7个字符的内容;如果是这种情况,您需要将<=
更改为<
。
String something = it.next();
if( something.length() < 5 || something.length() > 7 ) {
it.remove();
}
答案 1 :(得分:1)
it.next()
返回下一个元素并前进,因此&&
之后的第二个调用位于下一个元素上。
解决方案:将元素放在if语句之前的变量中,如下所示:
while (it.hasNext()) {
String str = it.next();
if(str.length() <= 5 || str.length() >= 7) {
it.remove();
}
}
也应该是||
,而不是&&
。
答案 2 :(得分:0)
您的代码说&#34;如果下一个元素是5或更少,而后面的元素是7或更多,那么......&#34;。不要在循环内两次调用next()
。
此外,您打算检查单个值,请注意它不能同时 小于5且大于7。您的意思可能是||
,而不是&&
。
所以,你的代码应该是:
public void normalOrd() {
for (Iterator<String> it = muligeOrd.iterator(); it.hasNext(); ) {
String ord = it.next();
if (ord.length() <= 5 || ord.length() >= 7) {
it.remove();
}
}
}
答案 3 :(得分:0)
重构您的代码,以便您每次通过循环只调用it.next()
一次。
例如:
public void normalWord ( ) {
Iterator<String> it = muligeOrd.iterator();
while (it.hasNext()) {
String nextWord = it.next();
if ((nextWord.length() <= 5) || (nextWord.length() >= 7)) {
it.remove();
}
}
}