如何在java中的ArrayList中将每个单词存储为一个文本文件(只有一次,没有重复)?

时间:2015-11-05 09:20:04

标签: java arraylist

我知道如何将每个单词存储在数组列表中的文本文件中,但是如何只存储一个单词?我的意思是没有重复。 谢谢

public class Analyze
{
    public static void main(String[] args)
    throws FileNotFoundException 
    {
        String l;
        Scanner f = new Scanner(
                new File("Readme.txt"));
        ArrayList<String> myArray=new ArrayList<String>();
        while(f.hasNext())
        {
            l=f.next();

            myArray.add(l);
            for(int i=0;i<myArray.size()-1;i++)
            if(l.equals(myArray.get(i)))
            myArray.remove(l);    
        }
         for(int i=0;i<myArray.size();i++)
        System.out.println(myArray.get(i));

    }
}

4 个答案:

答案 0 :(得分:2)

如果您要添加的单词已包含在其中,您可以随时查找ArrayList(ArrayList.contains())。或者您可以使用Set将Textfile读入,然后使用此Set初始化ArrayList(new ArrayList<String>(mySetOfUniqueWords);)。然而,这在很大程度上取决于单词的出现顺序是否对您很重要。

如果您的单词出现在不同的情况下(“测试”,“测试”,“TeSt”将像两种方法中的不同单词一样处理),则这不起作用。如果要将这些单词收集到一个实例中,您可以简单地实现自己的包装器,该包装器将覆盖equals字符串方法或您自己的WordSet / WordList实现,该实现将覆盖满足此要求的必要方法(contains(), add(), addAll() )。

答案 1 :(得分:1)

您有以下选择:

  • 使用Set(参见其他答案)
  • 检查列表是否已包含条目(也由其他人描述)
  • 创建一个唯一的列表,创建一个可能有重复的列表,如下所示:List<String> unique = originalList.stream().unique().collect(Collectors.toList())

答案 2 :(得分:0)

使用contains方法查找列表中包含该元素的文件

或者将数据存储在Set中,它不允许重复

ArrayList<String> str = new ArrayList<String>();
ArrayList<String> temp = new ArrayList<String>();
str.add("This");
str.add("is");
str.add("a");
str.add("Test");
str.add("This");
str.add("a");
str.add("is");

 for(int i=0;i<str.size();i++) {
     if(!temp.contains(str.get(i))){
         temp.add(str.get(i));
      }
 }

工作Example

答案 3 :(得分:0)

一种简单的方法是使用一个为您处理重复数据删除的结构,如Set,然后将其内容复制到ArrayList中:

Set<String> strings = new LinkedHashSet<>();  // preserves insertion order.
while (f.hasNext()) {
  strings.add(f.next());
}
List<String> list = new ArrayList<>(strings);