【问题标题】:How to create a Java program that removes duplicated words from text file? [closed]如何创建一个从文本文件中删除重复单词的 Java 程序? [关闭]
【发布时间】:2013-12-08 17:23:45
【问题描述】:

我想用 Java 制作一个可以删除文本文件中重复单词的程序。我是一个编程新手,我一直在谷歌搜索,但我还没有找到一个可以理解的指南来创建这样一个程序。我不是要求一个完整的程序作为答案(尽管这是非常可取的:p),但我真的很想就如何开发这个程序提出一些建议。请问,有人吗?我可以管理编程,我只是不知道这里应该采取什么步骤。

【问题讨论】:

  • 它是 Java 而不是 JAVA,并且不需要在问题的任何地方都提到它,因为它已被标记。此外,请尽最小的努力。
  • 你应该做的步骤:1)读取内存中的文件内容,2)检查你读过的内容,删除重复项(你可能希望将单词存储在不允许重复的结构中), 3) 将结果写回文件

标签: java duplicate-removal


【解决方案1】:

只是为了好玩,我写了一个快速解决方案,它大量使用Guava library 来避免样板IO 代码。

关键是 LinkedHashMap,它是标准 Java SDK 的一部分,它是一个 Set(即无重复集合),其元素按插入顺序保存。

这种方法正是eis commented,使用LinkedHashMap作为“不允许重复的结构”。

private static void removeDuplicateWords(File file) {
    try {
        String contents = Files.toString(file, Charsets.UTF_8);
        String[] words = contents.split("\\s+"); // or however you define "word"!

        // UsingLinkedHashSet to remove duplicates while retaining order
        LinkedHashSet<String> linkedHashSet = Sets.newLinkedHashSet();
        Collections.addAll(linkedHashSet, words);

        String newContents = Joiner.on(" ").join(linkedHashSet);
        Files.write(newContents, file, Charsets.UTF_8);

    } catch (IOException e) {
        System.out.println(e);
    }
}

【讨论】:

  • 这会丢失换行符,并且如何定义一个单词(并处理punctuation)是模棱两可的。这些细节留给任何需要这种程序的人作为练习。 :P
  • 哇,非常感谢。我会通过它,@Jonik。
【解决方案2】:

使用 String.split(" ") 将文本中的所有单词放入数组 (String[]),然后将它们附加到 SET 中,这样就不会出现重复项。现在对数组进行循环以重写文本并从 SET 中删除匹配的单词。添加条件如果一个单词在araay中但不在SET中(意味着它是重复的)它不会被重写

希望对你有帮助

【讨论】:

    猜你喜欢
    • 2021-09-06
    • 2016-01-24
    • 1970-01-01
    • 1970-01-01
    • 2017-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多