我想列出一个文本文件中的每个唯一单词,以及在其中找到每个单词的次数。
我尝试使用if
循环,但不确定如何计算已经列出的单词。
for (int i = 0; i < words.size(); i++) {
count = 1;
//Count each word in the file and store it in variable count
for (int j = i + 1; j < words.size(); j++) {
if (words.get(i).equals(words.get(j))) {
count++;
}
}
System.out.println("The word " + words.get(i) + " can be
found " + count + " times in the file.");
}
文本文件的内容为“ Hello world。Hello world。”,程序将打印以下内容:
The word Hello can be found 2 times in the file.
The word world can be found 2 times in the file.
The word Hello can be found 1 times in the file.
The word world can be found 1 times in the file.
答案 0 :(得分:1)
我建议利用HashMap解决此问题。简而言之,HashMap是一个散列键的键值对,搜索复杂度为O(1)。
仅迭代单词列表一次,并继续将遇到的单词存储在HashMap中。当您遇到一个单词时,请检查它是否已经存在于HashMap中。如果不存在,则将其添加到地图中,并以key作为单词本身,并将value设为1。 如果存在alrady一词,则将该值增加1。
完成迭代后,HashMap将包含唯一单词及其数量的键值对!
以防万一,如果您不知道Java中的地图-https://www.javatpoint.com/java-hashmap
答案 1 :(得分:0)
您可以这样做:
public void printWordOccurence(String filePath) throws FileNotFoundException {
if (filePath.isEmpty())
return;
File file = new File(filePath);
Scanner input = new Scanner(file);
HashMap<String, Integer> wordOccurence = new HashMap<>();
while (input.hasNext()) {
wordOccurence.merge(input.next(), 1, Integer::sum);
}
for (String word : wordOccurence.keySet()) {
System.out.println(word + " appears " + wordOccurence.get(word) + " times");
}
}
答案 2 :(得分:0)
您需要使用ArrayList
存储已经找到的单词,然后,您需要检查文件中的每个单词,无论它们是否存在于ArrayList中。如果ArrayList中存在该单词,则需要忽略该单词。否则,将该单词添加到ArrayList中。
适合您的示例代码:
ArrayList<String> found_words=new ArrayList<String>();
public static void main(String arguments[])
{
String data=""; //data from your file
String[] words=data.split("\\s"); //split the string into individual words
for(int i=0;i<words.length;i++)
{
String current_word=words[i];
if(!is_present(current_word))
{
found_words.add(current_word);
int count=1;
for(int j=i+1;j<words.length;j++)
{
if(words[j].equals(words[i]))
++count;
}
System.out.println("The word "+current_word+" can be found "+count+" times in the file.");
}
}
}
static boolean is_present(String word)
{
for(int i=0;i<found_words.size();i++)
{
if(found_words.get(i).equals(word))
return true;
}
return false;
}