热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

优化后的标题:利用HashSet迭代器进行字符验证

本文介绍了一种使用HashSet迭代器的方法来验证字符串集合中的元素。具体而言,通过迭代器遍历名为“名称”的字符串哈希集,并删除其中包含任何非大写字母的项。该方法能够高效地过滤出不符合条件的字符串,确保集合中仅保留纯大写字母的条目。

我有一个String哈希集(称为“名称”),我想从中删除所有包含至少一个不是大写字母的字符的String。
我写了这段代码,它不起作用:

Iterator iterator=names.iterator();
while(iterator.hasnext()) {
for (int i=0; i if (iterator.next().charAt(i) <'A' || iterator.next().charAt(i) > 'Z') {
names.remove(iterator.next());
}
}
}



另一种解决方案,如果您正在使用Java-8,则使用removeIf和正则表达式[A-Z]+,如下所示:

Set names = //.. some inputs
names.removeIf(str -> !str.matches("[A-Z]+")); // remove if not matches [A-Z]+

请注意,在此解决方案中,您根本不需要将列表转换为迭代器,也不需要通过循环检查字符,只需通过正则表达式进行匹配即可。

,

您的代码存在三个问题:


  1. 您应该在while循环的每次迭代中调用一次iterator.next()(因为每次调用iterator.next()都会返回一个不同的元素)。


  2. 您应该使用Iterator的remove方法删除当前元素(这是在Collection上进行迭代的同时对其进行结构更改的唯一有效方法)。


  3. 在删除当前元素时,您应该跳出循环,以避免尝试多次删除同一元素。

    Iterator iterator = names.iterator();
    while (iterator.hasNext()) {
    String str = iterator.next();
    for (int i = 0; i if (str.charAt(i) <'A' || str.charAt(i) > 'Z') {
    iterator.remove();
    break;
    }
    }
    }




推荐阅读
author-avatar
riwei2004sohu
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有