在文件中查找唯一的单词 - Java

时间:2010-01-08 21:29:14

标签: java

使用msdos窗口我在amazon.txt文件中管道。 我正在尝试使用集合框架。请记住,我想保留这个 尽可能简单。 我想要做的是计算文件中所有独特的单词......没有重复。

这是我到目前为止所拥有的。请善意这是我的第一个java项目。

import java.util.Scanner;
import java.util.ArrayList;
import java.util.Iterator;

public class project1 {

    // ArrayList<String> a = new ArrayList<String>();

    public static void main(String[] args) {
        Scanner  sc = new Scanner(System.in); 
        String  word;
        String grab;

        int count = 0;
        ArrayList<String> a = new ArrayList<String>();
        // Iterator<String> it = a.iterator();

        System.out.println("Java project\n");

        while (sc.hasNext()) {      
            word = sc.next();  
            a.add(word); 
            if (word.equals("---")) {
            break;
            }
        }

        Iterator<String> it = a.iterator();

        while (it.hasNext()) {
            grab = it.next();

            if (grab.contains("a")) {
                System.out.println(it.next()); // Just a check to see
                count++;
            }
        }
        System.out.println("I counted abc = ");
        System.out.println(count);
        System.out.println("\nbye...");
    }
}

2 个答案:

答案 0 :(得分:9)

在您的版本中,wordlist a将包含所有单词,但也包含重复项。你可以

(a)检查每个新单词,如果它已经包含在列表中(List#contains是您应该调用的方法),或者推荐的解决方案

(b)将ArrayList<String>替换为TreeSet<String>。这将自动消除重复并按字母顺序存储单词

修改

如果要计算唯一单词,请执行与上面相同的操作,所需的结果是集合大小。因此,如果您输入序列“a a b c ---”,则结果为3,因为有三个唯一的单词(a,b和c)。

答案 1 :(得分:3)

使用HashSet&lt; String&gt;而不是ArrayList&lt; String&gt; (未排序)或TreeSet&lt; String&gt; (已排序)如果您不需要计算每个单词出现的频率,Hashtable&lt; String,Integer&gt; (未排序)或TreeMap&lt; String,Integer&gt; (已排序)如果你这样做。

如果有您不想要的单词,请将它们放在HashSet&lt; String&gt;中。并确保在放入收藏夹之前,这不包含扫描仪找到的字词。如果您只想要字典单词,请将字典放在HashSet&lt; String&gt;中。并确保它包含扫描仪在放入您的收藏夹之前找到的字词。