这是我对词频的逻辑。我不应该使用HashMap
来存储单词的频率。我得到ArrayIndexoutofBoundsException
,但无法找出原因。
程序:
package thirdassignments;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.Scanner;
public class WordFreq2 {
public void Working() {
try {
File file = new File("C:/Users/kishansr/Desktop/file1.txt");
FileReader fileReader = new FileReader(file);
BufferedReader bufferedReader = new BufferedReader(fileReader);
StringBuffer stringBuffer = new StringBuffer();
String line;
while ((line = bufferedReader.readLine()) != null) {
stringBuffer.append(line);
stringBuffer.append("\n");
}
fileReader.close();
String sentence = stringBuffer.toString();
String [] words = sentence.split("\\s+"); // splits by whitespace
for (String word : words) {
System.out.println(word);
}
String word1[] = new String [100000];
int count[] = {0}, count1 = 0;
for (String word : words) {
count1 = count1 + 1;
}
System.out.println("COunt :" + count1);
for (String word : words) {
for (int i = 0 ; i < count1 ; i++) {
if (word1[i] != word) {
word1[i] = word;
count[i] = 1; // here the exception is oocuring
}
else if (word1[i] == word) {
count[i] = count[i] + 1;
}
}
}
for (int i = 0 ; i < count1 ; i++) {
System.out.println(count[i] + " : " + word1[i]);
}
}
catch (IOException e1) {
e1.printStackTrace();
}
}
public static void main(String [] args) {
// TODO Auto-generated method stub
WordFreq2 wf = new WordFreq2();
long startruntime = System.nanoTime();
wf.Working();
long endruntime = System.nanoTime();
System.out.println( "start time: " + startruntime + " end time :" + endruntime + " diferrence: " + (endruntime - startruntime));
}
}
输出:
此
是
该
惠普
惠普
公司
。
这
公司
是
传播
在
该
世界
和
有
建立
其
脚印
在
几乎
所有
国家
。
它
有
一个
巨大
员工
计数
和
有
更
女性
员工
比
男性
员工
。
COunt:39
线程&#34; main&#34;中的例外情况java.lang.ArrayIndexOutOfBoundsException:1
答案 0 :(得分:1)
你的计数数组:
int count[]={0};
有一个元素
因此,对于任何i&gt; 0,您将获得count [i]的例外。
也许您应该将其初始化为与word1
数组相同的长度:
int count[]= new int[100000];
此外,将word1[i]==word
替换为word1[i].equals(word)
。
答案 1 :(得分:1)
您已经实例化了count[]
数组,其大小为1.它必须至少与您的数组一样大。
尝试更改此行
String word1[]=new String[100000];
int count[]={0},count1=0;
for (String word : words) {
count1=count1+1;
}
到
String word1[]=new String[100000];
int count1=0;
for (String word : words) {
count1=count1+1;
}
count[]= new int[count1];