繁体   English   中英

Java:从txt文件读取,并且每个单词仅在数组+排序中存储一次

[英]Java: Read from txt file and store each word only once in array + sorting

我的程序有问题。 我应该做的是:

  1. 找到一些txt文件中的所有单词
  2. 每个单词在数组中存储一次
  3. 然后按字母顺序排序

我不知道如何确保每个单词在我的数组中不会出现两次(或更多次)。 例如,我的一个文件中的一句话:我的猫很大,我的狗很懒。 我希望单词“ my”和“ is”在我的数组中仅出现一次,而不是两次。

至于排序,我可以在Java中使用任何东西吗? 我不知道。

任何帮助表示赞赏!

到目前为止,这是我所做的:

try {
    File dir = new File("path of folder that contains my files")

    for (File f : dir.listFiles()) {
        BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(f)));
        String line = null;
        while((line = br.readLine())!= null) {
            String [] tokens = line.split(",\\s+|\\s*\\\"\\s*|\\s+|\\.\\s*|\\s*\\:\\s*");
        }
    }
}

这是经过修改的代码,已对唯一词进行了排序:

try {
        TreeSet<String> uniqueSortedWords = new TreeSet<String>();
        File dir = new File(
                "words.txt");

        BufferedReader br = new BufferedReader(new InputStreamReader(
                new FileInputStream(dir)));
        String line = null;
        while ((line = br.readLine()) != null) {
            String[] tokens = line
                    .split(",\\s+|\\s*\\\"\\s*|\\s+|\\.\\s*|\\s*\\:\\s*");
            for(String token: tokens) {
                uniqueSortedWords.add(token);
            }
        }
        System.out.println(uniqueSortedWords);
        //call uniqueSortedWords.toArray() to have output in an array
    } catch (Exception e) {
        e.printStackTrace();
    }

如果我猜您正在寻找类似这样的代码。

try {
    ArrayList<String> list = new ArrayList<String>();
    File dir = new File("path of folder that contains my files")

    for (File f : dir.listFiles()) {
        BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(f)));
        String line = null;
        while((line = br.readLine())!= null) {
            String [] tokens = line.split(",\\s+|\\s*\\\"\\s*|\\s+|\\.\\s*|\\s*\\:\\s*");
            for(int i=0; i<tokens.length(); i++)
            {  //Adding non-duplicates to arraylist
               if (!list.contains(tokens[i])  
               {
                   list.add(tokens[i]);
               }
            }
        }
        Collections.Sort(list);
    }
}
catch(Exception ex){}

不要忘记: import java.util.*; 在代码的开头使用Collections.Sort();

编辑

即使contains是一个内置方法,您可以直接与ArrayLists一起使用,但实际上这是这样一种方法的工作方式(以防万一,如果您好奇的话):

public static boolean ifContains(ArrayList<String> list, String name) {
    for (String item : list) {
        if (item.getName().equals(name)) {
            return true;
        }
    }
    return false;
}

然后称之为:

ifContains(list, tokens[i]))

您可以结合使用HashSet和TreeSet

  1. Hashset :hashset允许空对象。
  2. TreeSet :treeset不允许使用null对象,treeset元素默认情况下按升序排序。
  3. HashSet和TreeSet都不包含重复的元素。

     try { Set<String> list = new HashSet<>(); File f = new File("data.txt"); BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(f))); String line = null; while ((line = br.readLine()) != null) { String[] tokens = line.split(",\\\\s+|\\\\s*\\\\\\"\\\\s*|\\\\s+|\\\\.\\\\s*|\\\\s*\\\\:\\\\s*");// other alternative:line.split("[,;-!]") for (String token : tokens) { list.add(token); } } // Add the list to treeSet;Elements in treeSet are sorted // Note: words must have the same case either lowercase or uppercase // for sorting to work correctly TreeSet<String> sortedSet = new TreeSet<>(); sortedSet.addAll(list); Iterator<String> ite = sortedSet.iterator(); while (ite.hasNext()) { System.out.println(ite.next()); } } catch (Exception e) { e.printStackTrace(); } 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM