【发布时间】:2016-09-08 07:15:48
【问题描述】:
我为学校做的一些代码有问题。试图将其保持在我的逻辑范围内(并且天生就失败了)。只是想知道是否有任何技巧可以使这项工作;
public static String[][] sortWords(BufferedReader in, int n) throws IOException{
String line = "";
int ctr = 0;
String[][] words = new String[n][2];
for(int m = 0; m < n; m++) {
words[m][1] = "1";
}
while((line=in.readLine())!=null) {
String a[]=line.split(" ");
for(int i = 0; i < a.length; i++) {
a[i] = a[i].toUpperCase();
for(int h = ctr; h < n; h++) {
if (words[h][0].equals(a[i])) {
words[h][1] = "" + (Integer.parseInt(words[h][1])+1);
} else{
words[ctr][0] = a[i];
ctr++;
break;
}
}
}
line=in.readLine();
}
return words;
}
我要做的是获取一个很大的 txt 文件(70k 字)并剖析它。我想的这种方法可以做到以下几点; - 查找文件中的所有单词 - 找出每个单词出现的次数 - 将这两个值存储在二维数组中以便于访问。
如果我不在基地,我明白。 提前谢谢你。
【问题讨论】:
-
您将使用此代码跳过一行
}}} line=in.readLine(); -
当您将计数设置为从 1 开始时,当您找到第一次出现的单词时,您会更新计数器并以 1 次出现和 count == 2 结束。您应该从 0 开始或移动循环中的初始化部分。而且,您将数组的长度设置为行数,但您可以找到的单词可能远不止于此。
-
在
HashMap<String, Integer>中存储单词及其出现更容易。每次找到一个新单词时,将其放入HashMap并将其值放入1,如果它已经在哈希中,则使用++或任何您想要的值来更新值。 -
你应该去掉最后一个
line=in.readLine(); -
谢谢大家,我已经使用 HashMaps 方法对其进行了排序。关于马里奥所说的关于数组长度的内容,我已经运行了一个计算单词的方法,所以我有单词的总数,所以我将数组设置为那个,即使它会更短(由于 uiniques)。这也是问题所在,一旦我让 BufferedReader 通过一个方法它正在关闭并且什么都不做,也许如果我修复了它可能工作的 readLIne 部分(我知道怀疑)。
标签: java arrays bufferedreader