0

我编写了一个代码,它从文本中读取所有单词,计算所有唯一单词,然后将所有唯一单词以及该单词在文本中重复的次数写入一个新数组。出于一个原因,当我执行它时,程序将所有单词视为唯一的,并且在“if”循环中,所有单词的条件都变为“false”。您知道我应该从我的代码中更改什么以使其正确比较单词吗?谢谢!

import java.util.*;


class textAnalyzer{

public static void main(String[] args){

    Help hj = new Help();
    hj.metode1(args[0]);
}
}


class Help{
void metode1(String filename){

    In les = new In (filname); //input *.txt file

    int totalWords = 0; // counter with total words from the text
    int uniqueW = 0; //counter with the number of total unique words
    boolean funnet = false;

    String[] word = new String[30835]; //array with each unique word
    int quantity[] = new int[30835]; // array the number of times a unique word is repeated on the text

    while(read.endOfFile() == false) {


        for(int i = 0; i < word.length; i++){
                        String oneWord = read.inWord();
                        totalWords++;

            if(ord[i] == denneOrd){
                found = true;
            }

            if(found){
                quantity[i]++;
                uniqueW++;
            }else{
                word[i] = oneWord;
                }   

        }

        totalWords++
    }

    System.out.println("Number words read: " + totalWords + " number unique words: " + uniqueW);



}

}
4

4 回答 4

0

您最好使用 HashMap 来完成此任务:

Map<String, Integer> word_counts = new HashMap<String, Integer>();

for (Strign word : words_producer) { 

    Integer count = word_counts.get(word, 0);
    word_counts.put(word, (count == null) ? 1 : count + 1);
}

// Get the set of unique words
Set<String> words = word_counts.keySet();

// Print each word's count
for (String word : words) {
    int count = word_counts.get(word);
    System.out.printf("word: %s, count: %d\n", word, count);
}
于 2013-10-16T10:58:29.727 回答
0

使用“==”来比较原始数据类型,对于对象,您可以使用 equals 方法与其他对象进行比较。对于 String 对象,您可以使用 .equalsIgnoreCas() 方法忽略大小写。

if(word[i] == denneOrd){   //here you need to change 
    found = true;
}

需要更改为

if(word[i].equals(denneOrd)){ 
    found = true;
}
于 2013-10-16T10:49:21.247 回答
0

使用.equals方法或者.equalsIgnoreCase如果你不想考虑大小写,而不是 ==。

  if(ord[i].equals(denneOrd)){
                found = true;
            }

或者

  if(ord[i].equalsIgnoreCase(denneOrd)){
                found = true;
            }
于 2013-10-16T10:50:24.083 回答
0

将所有单词放在一个集合中,然后检查集合的大小

如何将项目添加到集合

然后使用检查集合的大小

检查集合的大小

Set 具有删除重复项的属性

于 2013-10-16T10:51:03.533 回答