阅读&按字母顺序比较文本文件和打印文字

时间:2018-04-11 18:38:51

标签: java arrays string sorting

首先,我很抱歉,如果之前有过类似的问题,但我找不到我想要的解决方案。所以我有一个小的java程序,它比较两个文本文件(text1.txt& text2.txt)并打印text2.txt中不存在的text1.txt的所有单词。下面的代码完成了这项工作:

text1.txt :这是文本文件1. some @ random - text

text2.txt :这是文本文件2.

Pi ~ 2.611200

(在新行中打印单词)

  

输出:@,some,random,1。

我正在尝试按字母顺序打印所有单词。并且如果可能的话,它不应该打印任何专门的字符(@, - 或数字)。我一直想弄清楚但没有运气。如果有人可以帮助我,我会很感激。

此外,我从互联网上采取了以下代码,我并不熟悉。有没有其他更简单的方法来放置这行代码:

import java.io.*;
import java.nio.charset.Charset;
import java.nio.file.Files;
import java.util.*;

public class Read {

   public static void main(String[] args) {
      Set<String> textFile1 = readFiles("text1.txt");
      Set<String> textFile2 = readFiles("text2.txt");

      for (String t : textFile1) {
         if (!textFile2.contains(t)) {
            System.out.println(t);
         }}}

   public static Set<String> readFiles(String filename) 
   {
      Set<String> words = new HashSet<String>();

      try {         
         for (String line : Files.readAllLines(new File(filename).toPath(), Charset.defaultCharset())) {    
            String[] split = line.split("\\s+");
            for (String word : split) {
               words.add(word.toLowerCase());
            }}} 
      catch (IOException e) {
         System.out.println(e);
      }
      return words;
   }
}
  

编辑:HashSet是这项工作的必备条件。对不起,我忘了   提到那个。

3 个答案:

答案 0 :(得分:0)

您是否查看了其他任何Set实施?我认为如果您使用SortedSet而不是TreeSet,而不是HashSet,则这些字词会自动按字母顺序排列。

如果您一次提出一个问题,

Stack Overflow会更好。

答案 1 :(得分:0)

由于不允许使用TreeSet并强制使用HashSet,所以这样做

import java.io.*;
import java.nio.charset.Charset;
import java.nio.file.Files;
import java.util.*;

public class Read {

   public static void main(String[] args) {
      Set<String> textFile1 = readFiles("text1.txt");
      Set<String> textFile2 = readFiles("text2.txt");

      Set<String> difference = new HashSet<String>();

      // collect strings by dropping out every string that's not only letters
      // using the regex "[a-zA-Z]+"
      for (String t : textFile1) {
         if (!textFile2.contains(t) && t.matches("[a-zA-Z]+")) {
            difference.add(t);
         }
      }

      // sort
      List<String> dList = new ArrayList<String>(difference);
      Collections.sort(dList);

      // show
      for (String s : dList) {
         System.out.println(s);
      }
   }

   public static Set<String> readFiles(String filename) 
   {
      Set<String> words = new HashSet<String>();

      try {         
         for (String line : Files.readAllLines(new File(filename).toPath(), Charset.defaultCharset())) {    
            String[] split = line.split("\\s+");
            for (String word : split) {
               words.add(word.toLowerCase());
            }}} 
      catch (IOException e) {
         System.out.println(e);
      }
      return words;
   }
}

答案 2 :(得分:0)

从我在java文档中读到的内容,HashSet并不保证对集合中的元素进行排序。但是,如果您要实现为SortedSet,它应该允许对元素进行排序,但您可能也需要为它做一个比较器。

至于你的其他问题,对于阅读java中的文件,我发现geeks中的this guide非常用户友好,特别是初学者,并且显示了多种读取文件的方法。

特殊字符可能有点棘手,但是之前的Stack Overflow答案中有一个指南here可能会有所帮助。