我知道如何将每个单词存储在数组列表中的文本文件中,但是如何只存储一个单词?我的意思是没有重复。 谢谢
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));
}
}
答案 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);