创建包含字长

时间:2016-01-14 06:05:49

标签: java

我正在尝试使用哈希映射创建一个表,或者使用hasTokens来显示具有相同长度的文件中显示多少个单词的频率。例如,长度为2个字符的单词可能会在整个文本中显示5次。

在.txt文件中,最长的单词是9个字母。如何设置我的代码来分析文件,然后创建一个表格,输出长度为1-9个字符的单词被发现的次数?

我尝试过创建一个for循环,例如:

for(int i= 0; i<word.length(); i++)
        {
        if (word.length()== 1)
        {
            System.out.println("The words with length of 1 are: " + i);

        }
    }

然而它继续无限继续,但当我删除while循环时它失败了。希望有人能够给我一些关于做什么的提示。 谢谢, 杰夫

2 个答案:

答案 0 :(得分:0)

您可以使用HashMap,其长度为Key,单词count为value。例如。长度为1-3(未经测试):

List<String> words = Arrays.asList(new String[]{"aaa", "bbb", "x", "y", "rr", "tt"});
Map<Integer, Integer> map = new HashMap<Integer,Integer>();
map.put(1, 0);
map.put(2, 0);
map.put(3, 0);
for(String word: words) {
    int cnt = map.get(word.length());
    map.put(word.length(), ++cnt);  
}

答案 1 :(得分:0)

如果我理解正确,答案就是创建一个整数数组并将其编入索引。这将更快更小:

final static int MIN_WORD_LENGTH=2;
final static int MAX_WORD_LENGTH=9;

int counts[MAX_WORD_LENGTH-MIN_WORD_LENGTH];  // allow for longer words :-)

private void addWord(int length) {
     if ((length >=2) && (length < MAX_WORD_LENGTH)) 
         counts[length-MIN_WORD_LENGTH]++;
} 

我个人会使用更大的数组并摆脱映射和边界检查。然后我会创建一个更高的异常处理程序,以捕获超出范围的任何内容。像这样: -

 int counts[30];  // allow for longer words :-)

private void addWord(int length) throws ArrayIndexOutOfBoundsException{
         counts[length]++;
} 

在大多数现代处理器上,几个字节的额外存储空间不是问题,您可以在代码大小上节省更多。我也摆脱了函数调用,为了清楚起见,这里是

然后打印:

void printCounts() {
     for(int i=0; i < 20; i++) {
         if (counts[i] >0) 
            System.out.printline("There are " + counts[i] + " words of length" + i); 
     }
}