将文本文件中的字长放入数组的有效方法

时间:2015-11-28 00:26:05

标签: java arrays string

我使用扫描仪读取文本文件,从每行中删除标点符号,并将所有单词存储在单个字符串数组中。

我试图将字长的频率放在一个数组中,例如,长度为1的字符串将进入另一个索引为1的数组,长度为2的字符串将进入索引为2的数组,长度为15或者更大,直到我把这个单词的所有长度都计算好并放入我的新数组中。

是否有更有效的方法来执行此操作,而不是遍历单词数组,并为每个单词长度生成15个else-if语句?

澄清:如果没有导入任何包,有没有办法做到这一点?看起来这样做的唯一方法是通过字长频率数组迭代它,例如, 15次使用双循环或通过15 else-if语句块运行。

3 个答案:

答案 0 :(得分:0)

创建列表数组并使用字符串长度作为数组中的索引。这样的事情:

List<String>[] lists = new ArrayList[16];
...
lists[str.length].add(str);

答案 1 :(得分:0)

我认为最好的方法就是像你的案例HashMap<K,V> list一样使用像这个例子一样的HashMap

HashMap<Integer,ArrayList> list = new HashMap<>();
list.put(lenght,new ArrayList <String>());
list.get(lenght);

更多信息here

答案 2 :(得分:0)

您可以使用String的长度作为索引。

int[16] leng = {0}; // put 0 in all of the cells
String all, word;
.
.
.
leng[word.length()-1]++;

每当您有一个长度为i的单词时,它会向位置i-1(i> 0)添加1。
第一个单元格(leng [0])将包含长度为1的单词数。
第二个单元格(leng [1])将包含长度为2的单词数。



n单元格(leng [n-1])将包含长度为n的单词数。

您有16个单元格(0-14和15+),因此您可以执行以下操作:
你可以用一个条件来做到这一点:

if(word.length() < 15)
{
    leng[word.length()-1]++;
}
else
{
    leng[15]++;
}

另一种方式(相同但有一行):

length[(word.length()<15)(word.length()):(15)]++;
祝你好运:)