我有一个字符串哈希集(称为“名称”),我想从其中删除所有包含至少一个不是大写字母的字符的字符串。我写了这段代码,它不起作用:
Iterator<String> iterator=names.iterator();
while(iterator.hasNext()) {
for (int i=0; i<iterator.next().length(); i++) {
if (iterator.next().charAt(i) < 'A' || iterator.next().charAt(i) > 'Z') {
names.remove(iterator.next());
}
}
}
您应该在while循环的每次迭代中调用一次iterator.next()
(因为每次调用iterator.next()
都会返回一个不同的元素)。
[此外,您应该使用Iterator
的remove方法来删除当前元素(这是在Collection
上进行迭代时对其进行结构更改的唯一有效方法)。
最后,一旦删除当前元素,就应该跳出循环,因为您不想尝试多次删除它。
Iterator<String> iterator = names.iterator();
while (iterator.hasNext()) {
String str = iterator.next();
for (int i = 0; i < str.length(); i++) {
if (str.charAt(i) < 'A' || str.charAt(i) > 'Z') {
iterator.remove();
break;
}
}
}
另一种解决方案,如果您正在通过使用removeIf
和正则表达式removeIf
使用Java-8,则这样:
[A-Z]+
请注意,在此解决方案中,您根本不需要将列表转换为迭代器,也不需要通过循环检查字符,只需通过正则表达式进行匹配即可。