【问题标题】:Efficient way of putting word lengths from text file into array [duplicate]将文本文件中的字长放入数组的有效方法[重复]
【发布时间】:2015-11-28 00:26:04
【问题描述】:

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

我正在尝试将单词长度的频率放入一个数组中,例如,长度为 1 的字符串将进入另一个索引为 1 的数组,长度为 2 的字符串将进入索引为 2 的数组,长度为 15或更大,最终直到我计算完单词的所有长度并将其放入我的新数组中。

有没有更有效的方法来代替遍历单词数组并为每个单词长度创建 15 个 else-if 语句?

澄清:有没有办法在不导入任何包的情况下做到这一点?似乎唯一的方法是通过字长频率数组迭代它,例如使用双 for 循环或通过 15 个 else-if 语句块运行 15 次。

【问题讨论】:

  • 最长单词的长度是否已知?
  • 你可能想使用HashMapArrayListBufferedReader
  • @amirag 我在 15 个字或更多字时停止了我的数组。
  • 好的,谢谢。我会写算法
  • 真的看不出这个问题和上面的一样。两者都是关于不同的事情

标签: java arrays string


【解决方案1】:

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

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

每次你有一个长度为i 的单词时,它都会将位置i-1 加1 (i > 0)。
第一个单元格 (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)]++;

祝你好运:)

【讨论】:

  • 忘了解释:all = 完整的String,所有单词。 word = 您正在检查的单词。
【解决方案2】:

创建列表数组并使用字符串的长度作为数组中的索引。类似的东西:

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

【讨论】:

    【解决方案3】:

    我认为最好的方法是在你的情况下使用 HashMap HashMap&lt;K,V&gt; list 就像这个例子

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

    更多信息here

    【讨论】:

      猜你喜欢
      • 2016-02-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-28
      • 2015-11-21
      • 1970-01-01
      相关资源
      最近更新 更多