2016-01-20 245 views
0

下面是一个代码,我试图从文件夹(测试器)中获取文件的内容,该文件夹中有一些文本文件。之后,我必须从文本文件中出现的所有单词中作出字典。我得到的字(字符串),但他们重复,我不得不删除重复的话。删除阵列/阵列列表中的重复字符串

实施例:

文件1 - 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)); 
    } 
}   

回答

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); 

     } 
+0

“s.trim()” 工作长官......非常感谢。 –

0

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

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