我应该如何遍历 HashSet,删除某些元素并更改其他元素?

How should I iterate through a HashSet, removing certain elements, and altering others?

我有以下方法,它传递了来自 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() 做的事情吗?

您不能在遍历 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);
}