从数组/ arraylist中删除重复字符串

时间:2016-01-20 19:08:28

标签: java indexing hashmap

下面是一个代码,我试图从包含一些文本文件的文件夹(Tester)中获取文件的内容。之后,我必须从文本文件中的所有单词中创建一个字典。我得到的字(字符串),但他们正在重复,我必须删除重复的单词。

示例:

file1 - John is coding和file2 - John is really not coding

所以我想要的输出是 - John is coding really not,即不重复输出。

此外,我必须制作一个包含所有单词和相应文本文件的矩阵(就像索引器一样)。 例如:

             file1         file2


     John      1              1

       is      1              1

   coding      1              1

   really      0              1

     not       0              1

任何帮助都会非常感激,我被困住了。

public static void main(String[] args) throws IOException {
    File folder = new File("/home/gaurav/Tester");
    File[] listOfFiles = folder.listFiles();
    ArrayList<String> array = new ArrayList<String>();

    for (int i = 0; i < listOfFiles.length; i++) {
        File file = listOfFiles[i];

        if (file.isFile() && file.getName().endsWith(".txt")) {
            String content = FileUtils.readFileToString(file);
            String[] a = content.split(" ");

            for (String s : a) {
                if (!array.contains(a)) {
                    array.add(s);
                }
            }
        }
    }

    for (int j = 0; j < array.size(); j++) {
        System.out.print(array.get(j));
    }
}         

2 个答案:

答案 0 :(得分:0)

     ArrayList<String> array = new ArrayList<String>();

一旦你有一个重复的数组,你可以这样做:

array = new ArrayList<>(new LinkedHashSet<>(array));

设置将删除重复项,因为它是喜欢它将保持订单

在这段代码中,您试图不添加重复项:

        for(String s:a){

            if(!array.contains(a))
             array.add(s);
        }

你的错误是你正在检查包含(a)而不是包含 另外一个好主意是在比较或添加之前修剪s。所以:

       for(String s:a){
          s = s.trim()
          if(!array.contains(s))
          array.add(s);

        }

答案 1 :(得分:0)

使用Set,因为它不包含重复元素:

Set<String> words = new HashSet<>();
// ...
for(String word: a) {
    words.add(word);
}