我的代码有问题。我从一个文本文件读到一个字符串数组的单词,删除了句号和逗号。现在我需要检查每个单词的出现次数。我也做到了。但是,我的输出包含文件中的所有单词以及出现的单词。是这样的:2鸟2是1要2北2北2
下面是我的代码:public static String counter(String[] wordList)
{
//String[] noRepeatString = null ;
//int[] countArr = null ;
for (int i = 0; i < wordList.length; i++)
{
int count = 1;
for(int j = 0; j < wordList.length; j++)
{
if(i != j) //to avoid comparing itself
{
if (wordList[i].compareTo(wordList[j]) == 0)
{
count++;
//noRepeatString[i] = wordList[i];
//countArr[i] = count;
}
}
}
System.out.println (wordList[i] + " " + count);
}
return null;
我需要弄清楚1)得到计数值到一个数组..2)删除重复。正如在评论中看到的,我试图使用一个countArr[]和一个noRepeatString[],希望这样做…但我有一个NullPointerException.
我会首先将数组转换为列表,因为它们比数组更容易操作。
List<String> list = Arrays.asList(wordsList);
然后你应该创建一个该列表的副本(你会在第二秒看到为什么):
ArrayList<String> listTwo = new ArrayList<String>(list);
现在删除第二个列表中的所有重复项:
HashSet hs = new HashSet();
hs.addAll(listTwo);
listTwo.clear();
listTwo.addAll(hs);
然后循环遍历第二个列表并获得该单词在第一个列表中的频率。但首先你应该创建另一个arrayList来存储结果:
ArrayList<String> results = new ArrayList<String>;
for(String word : listTwo){
int count = Collections.frequency(list, word);
String result = word +": " count;
results.add(result);
}
最后可以输出结果列表:
for(String freq : results){
System.out.println(freq);}
我还没有测试这段代码(现在不能这么做)。请询问是否有问题或doesnÄt工作。参考以下问题:
如何从数组列表中删除重复的元素?
在Java中计算String[]中String的出现次数?
如何克隆Java中的泛型列表?
代码中的一些语法问题,但工作正常
ArrayList<String> results = new ArrayList<String>();
for(String word : listTwo){
int count = Collections.frequency(list, word);
String result = word +": "+ count;
results.add(result);
}