设置重复Java-从文件导入-Java

时间:2018-07-02 13:18:20

标签: java csv arraylist duplicates set

我有一个小项目。

项目将txt文件导入到String(编码类似于CSV-包含分号=“;”)。

在接下来的步骤中,将String更改为ArrayList。

然后,使用谓词删除不感兴趣的元素。

最后,我替换TreeSet上的ArrayList以删除重复项。 不幸的是,这里存在问题,因为重复发生了...

我检查了Notepadd ++,更改了ANSI上的编码,以检查是否没有不必要的字符。

不幸的是,一切看起来不错,重复项仍然存在。

上传的输入文件-https://drive.google.com/open?id=1OqIKUTvMwK3FPzNvutLu-GYpvocUsSgu

有什么主意吗?

public class OpenSCV {
    private static final String SAMPLE_CSV_FILE_PATH = "/Downloads/all.txt";

    public static void main(String[] args) throws IOException {

        File file = new File(SAMPLE_CSV_FILE_PATH);
    String str = FileUtils.readFileToString(file, "utf-8");
    str = str.trim();
    String str2 = str.replace("\n", ";").replace("\"", "" ).replace("\n\n",";").replace("\\*www.*\\","")
            .replace("\u0000","").replace(",",";").replace(" ","").replaceAll(";{2,}",";");

        List<String> lista1 = new ArrayList<>(Arrays.asList((str2.split(";"))));

        Predicate<String> predicate = s -> !(s.contains("@"));

        Set<String> removeDuplicates = new TreeSet<>(lista1);

        removeDuplicates.removeIf(predicate);

        String fileName2 = "/Downloads/allMails.txt";
        try ( BufferedWriter bw =
                      new BufferedWriter (new FileWriter (fileName2)) )
        {
            for (String line : removeDuplicates) {
                bw.write (line + "\n");
            }
            bw.close ();
        } catch (IOException e) {
            e.printStackTrace ();
        }
    }
}

1 个答案:

答案 0 :(得分:0)

在执行str.replace之前,您可以尝试str.trim删除任何空格或不需要的和看不见的字符。

str = str.trim()