我有一个单词的向量,但我想按字母顺序重新排列(在相同的向量中或新的单词中),并跟踪每个单词在文本中出现的次数。
这是我将单词存储到向量中的方式:
Vector<String> elements = new Vector<String>();
int i = 0;
// read infile line by line
while ((line = infile.readLine()) != null)
{
String word;
StringTokenizer linesplit = new StringTokenizer(line, " ,.-");
while (linesplit.hasMoreElements()){
word = linesplit.nextElement().toString() ;
elements.add(i,(word));
i++;
}
}
要跟踪每个单词出现的次数,我想使用计数器:
public class Entry // implements Comparable<Entry>
{
private String word;
private int counter;
}
如何在当前矢量中检查一个单词是否出现多次,并按字母顺序重新排列单词?
答案 0 :(得分:0)
您可以使用Vector
对Collections.sort(vector)
进行排序。
为了存储每个令牌的出现次数,我建议使用HashMap<String, Integer>
,因为它具有持续的访问时间,如果已经使用map.containsKey()
已经存储了值,您可以轻松检查。然后,您只需迭代向量并计算每个标记的出现次数。
答案 1 :(得分:0)
@Warload有一个好主意,但是如果你使用SortedMap<String, Integer>
,那么你将能够同时完成两个目标(对事件进行排序和计数)。
它可能看起来像这样
SortedMap<String, Integer> map = new TreeMap<String, Integer>();
// read infile line by line
while ((line = infile.readLine()) != null)
{
String word;
StringTokenizer linesplit = new StringTokenizer(line, " ,.-");
while (linesplit.hasMoreElements()){
word = linesplit.nextElement().toString() ;
if (map.containsValue(word)) {
int i = map.get(word);
map.put(word, ++i);
}
else {
map.put(word, 1);
}
}
}
//some time later
Set<String> words = map.keySet();
Collection<Integer> counts = map.values();