Java 创建包含字长的频率表

Java 创建包含字长的频率表,java,Java,我正在尝试创建一个不使用hash-map或hasTokens的表,以显示一个文件中显示相同长度的单词的频率。例如,一个长度为2个字符的单词可能会在整个文本中出现5次 在.txt文件中,最长的单词是9个字母。如何设置代码来分析文件,然后创建一个表,输出长度为1-9个字符的单词被发现的次数 我已经尝试过创建for循环一段时间,例如: for(int i= 0; i<word.length(); i++) { if (word.length()== 1)

我正在尝试创建一个不使用hash-map或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);

        }
    }

对于(int i=0;i您可以使用HashMap,长度作为键,单词计数作为值。例如,对于长度1-3(未测试):

List words=Arrays.asList(新字符串[]{“aaa”、“bbb”、“x”、“y”、“rr”、“tt”});
Map Map=newhashmap();
map.put(1,0);
map.put(2,0);
map.put(3,0);
for(字符串字:字){
int cnt=map.get(word.length());
map.put(word.length(),++cnt);
}

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

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]++;
} 
在大多数现代处理器上,几个字节的额外存储不是问题,您可以在代码大小上节省更多。我也可以去掉函数调用,这是为了清晰起见

然后打印:

void printCounts() {
     for(int i=0; i < 20; i++) {
         if (counts[i] >0) 
            System.out.printline("There are " + counts[i] + " words of length" + i); 
     }
}
void printCounts(){
对于(int i=0;i<20;i++){
如果(计数[i]>0)
System.out.printline(“有”+计数[i]+“字长”+i);
}
}

您不想使用HashMap有什么原因吗?下面的答案非常适合您的需要,但它使用了HashMap。非常感谢您的回复和帮助。肯定帮了很多忙。不过,现在我正试图从整个文件.txt中分离出一些精选单词,并将其列出。例如,一个以大写字母,以“ed”结尾应该从整个文件中取出并打印出来。我的方法是使用for循环来搜索整个文件中的所有字符,但是我很难实现它来搜索大写字母eff,看看正则表达式,你可以很容易地用类似([A-Z][A-zA_Z]*[e][d])的东西找到这些单词。它为你提供了一个在线测试工具来调整你的RE。Java、python等可以用来搜索你的字符串、查找多个匹配项等。它们可能是编写和调试的一个难题:-)这种方法也很有帮助,使我对HashMap更加熟悉。非常感谢你。
 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); 
     }
}