使用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...");
}
}
答案 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;中。并确保它包含扫描仪在放入您的收藏夹之前找到的字词。