读取文本文件并删除所有重复项

时间:2019-05-29 17:43:44

标签: java

我有一个名为test1.txt的文本文件,我想删除所有重复项。这意味着只有唯一的单词在那里。 例子。

test1.txt:

dp/dt

输出应为:

hello i am a businessman  i am also a student

我的方法是这样的:

hello businessman also student

但这不是我想要的。我想删除重复出现的所有内容,以便我只能输出唯一的单词。

4 个答案:

答案 0 :(得分:1)

您需要的是Set接口的实现。 Java提供了多个:

  • HashSet:此实现不维护任何顺序
  • TreeSet:此实现可保持自然顺序(字符串的字典比较,数字的递增顺序等)
  • LinkedHashSet:此实现维护插入顺序。

就像其他人提到的那样,这似乎是一个明确的作业问题。因此,我不会为您编写解决方案的代码。但是,我将向您展示一个可行的示例算法。


步骤1:打开文件以逐个读取单词。

步骤2:声明两组,一组用于存储所有单词,另一组用于存储重复项。

步骤3:逐个阅读单词,然后尝试将其插入第一组。 Java的set的add方法根据插入成功或失败返回一个布尔值,表示正确或错误。
步骤4:尝试插入第一组。

步骤4.1:如果插入成功,则表明该词到目前为止从未遇到过。移至下一个单词,然后再次执行步骤4。

步骤4.2:如果插入失败,则意味着该单词已经在以前出现过,因此我们不应将其包含在最终列表中。因此放在第二个列表中。继续下一个单词,然后再次执行步骤4。

步骤5:完成所有单词后,您将在第一组(集合A)中拥有一组唯一的单词,以及在该段落中出现多次的一组单词。 (设置B)。

步骤6:执行A-B(A中所有单词的集合,但B中所有单词的集合)

步骤7:以上结果使所有单词只出现一次。

请注意,这只是解决方案的一种算法。还有其他使用其他数据结构的解决方案。 (您可以使用HasMap,在其中可以将每个单词映射到它出现的次数,然后将所有出现的单词打印一次。)还要注意,您也可以使用ArrayLists实现上述解决方案。弄清楚这些工作原理,您将真正学到一些东西。

答案 1 :(得分:1)

您可以使用HashMap跟踪每个单词及其在给定文本文件中的出现。

  

->单词,->字数

public static void main(String[] args) throws FileNotFoundException {

    Scanner input = new Scanner(new File("test1.txt"));

    ArrayList<String> list1 = new ArrayList<String>();

    HashMap<String, Integer> wordMap = new HashMap<String, Integer>();

    while (input.hasNext()) {
        list1.add(input.next());
    }

    for (String word : list1) {
        if (wordMap.get(word) == null) {
            wordMap.put(word, 1);
        } else {
            wordMap.put(word, wordMap.get(word) + 1);
        }
    }

    //If output order does not important just loop through wordMap
    for (String word : list1) {
        if(wordMap.get(word) == 1) {
            System.out.print(word + " ");
        }
    }
}

输出:

  

你好商人也是学生

答案 2 :(得分:0)

逐字处理句子。如果以前没有看到过该单词,请将其添加到已看到单词的“字典”中。如果单词在词典中,请删除它。

首先将字符串分成单词数组,然后按照上述逻辑遍历该数组。

答案 3 :(得分:0)

我只写这篇文章,因为有很多答案给出了复杂且非最佳的解决方案。

@Sambit提供的建议很简单,您应该这样做!

使用已有的代码,只需使用list1

public class MyClass {

  public static void main(String[] args) throws FileNotFoundException {

    Scanner input = new Scanner(new File("test1.txt"));

    ArrayList<String> list1 = new ArrayList<String>();

    while (input.hasNext()) {
        list1.add(input.next());

    }

    // This will automatically remove all duplicates from your list.
    HashSet<String> uniqueWords = new HashSet<>(list1);

    // Print all the unique words
    for(String word : uniqueWords)
      System.out.println(word);
}

输出:

  

你好,我也是商人,还是学生

集合是不同对象的集合,这意味着没有重复项。

HashSet的文档为here