我应该如何遍历 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);
}
我有以下方法,它传递了来自 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);
}