【问题标题】:How to make an array of Strings to store words of a "dictionary" from a .txt file?如何制作一个字符串数组来存储 .txt 文件中的“字典”单词?
【发布时间】:2015-10-21 23:17:40
【问题描述】:

我需要制作一个字典,它从.txt 文件中获取单词。这些单词(逐行分隔)需要存储在String 数组中。我已经达到了分离单词并将它们添加到新的.txt 文件的地步,但我不知道如何将它们分别添加到String 数组中。有

【问题讨论】:

  • “字典”是什么意思?键值对的哈希?如果是这样,那可以通过HashMap 实现
  • 按字典,我的意思是这就是我们的实际任务。我们假设通读 .txt 文件的行(它是 .txt 文件中的一本书)并扫描每个单词以检查它是否是小写等。然后我们必须将所有这些单词添加到字符串数组中在我们扫描所有这 3 个不同的 .txt 文件后,它会将数组中的每个字符串添加到一个名为 Dictionary.txt 的新 .txt 文件中。

标签: java arrays string dictionary


【解决方案1】:

您需要计算文件中的行数。创建一个该大小的数组

然后对于文件中的每一行,读取并将其插入index[lineReadFrom]处的数组中。

【讨论】:

  • 如果您愿意通过 Skype 向我展示您的意思,那将很有帮助。因为我觉得我这样做了,但我仍然遇到错误。
  • 我发布了代码。也许你可以看看我是否走在正确的轨道上。谢谢你,汤姆!
  • 每次执行 while 循环时,您都在创建数组。只创建一次数组。算出它应该有多大/之前/你开始添加东西。
  • 好的。我将它放在循环之外,现在我仍然收到相同的错误: 线程“main”中的异常 java.lang.ArrayIndexOutOfBoundsException: 0 at Dictionary.searchText(Dictionary.java:47) 第 47 行是“dict[i] = word”在我的代码中。有什么问题吗?
  • 重新开始。计算文件中的行数。创建一个该大小的数组。然后循环通过文件将单词添加到数组中。
【解决方案2】:

由于您不允许使用 ArrayListLinkedList 对象,我建议您在读取输入文件时“即时”保存找到的每个单词。以下是您可以完成的一系列步骤:

1.逐行阅读文件:使用常见的new BufferedReader(new FileInputStream("/path/to/file")) 方法并逐行阅读(我假设您已经在做,查看您的代码)。

2。检查每一行的单词: 用String.split() 分隔每个可能的单词并删除标点符号。

3.保存每个单词:循环遍历 String.split() 返回的字符串数组,对于您认为是单词的每个元素,更新您的统计信息并将其写入您的字典文件,并使用常见的 new BufferedWriter(new FileWriter("")).write(...);

4.关闭你的资源:在你完成循环之后关闭读者和作者,最好在finally块中。

【讨论】:

    【解决方案3】:

    这是一个完整的代码示例:

    public static void main(String[] args) throws IOException {
        File dictionaryFile = new File("dict.txt");
    
        // Count the number of lines in the file
        LineNumberReader lnr = new LineNumberReader(new FileReader(dictionaryFile));
        lnr.skip(Long.MAX_VALUE);
    
        // Instantiate a String[] with the size = number of lines
        String[] dict = new String[lnr.getLineNumber() + 1];
        lnr.close();
    
        Scanner scanner = new Scanner(dictionaryFile);
        int wordNumber = 0;
    
        while (scanner.hasNextLine()) {
            String word = scanner.nextLine();
            if (word.length() >= 2 && !(Character.isUpperCase(word.charAt(0)))) {
                dict[wordNumber] = word;
                wordNumber++;
            }
        }
        scanner.close();
    }
    

    大约 350 ms 完成对 118,620 行文件的执行,因此它应该可以满足您的目的。请注意,我在开始时实例化了数组,而不是在每一行上创建一个新的 String[](并像您在代码中所做的那样替换旧的)。

    我使用wordNumber 来跟踪当前数组索引,以便将每个单词添加到数组中的正确位置。

    我还使用了.nextLine() 而不是.next(),因为你说字典是用行而不是空格分隔的(这是.next() 使用的)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-01-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多