我应该如何遍历HashSet,删除某些元素,以及改变其他元素?

时间:2015-11-22 21:37:19

标签: java collections iterator hashset

我有以下方法,从IMDB评论中传递HashSet<String>个单词。

private static void reduceVocab(HashSet<String> vocab) {
    for (Iterator<String> i = vocab.iterator(); i.hasNext();) {
        String element = i.next();
        element = element.replaceAll("[^a-zA-Z0-9]", ""); // Need to replace this
        if (element.length() <= 3) {
            i.remove();
        }
    }
}

我想通过删除太短的HashSet并删除非字母数字字符来执行一些操作以减小String的大小。有没有办法执行我正在尝试使用element.replaceAll()

1 个答案:

答案 0 :(得分:4)

迭代时,您无法添加HashSet。这使你想要做的事略显尴尬。这条线

element = element.replaceAll("[^a-zA-Z0-9]", "");

给出一个新字符串,但新字符串不在集合中。

你可以这样做:

private static void reduceVocab(HashSet<String> vocab) {
    Set<String> copy = new HashSet<>();
    for (String str : vocab) {
        str = str.replaceAll("[^a-zA-Z0-9]", "");
        if (str.length() > 3)
            copy.add(str);
    }
    vocab.clear();
    vocab.addAll(copy);
}