У меня небольшой проект.
Проект импортирует текстовый файл в строку (кодировка, аналогичная CSV - содержит точки с запятой = ";").
На следующих шагах String изменяется на ArrayList.
Затем, используя Predicate, я удаляю элементы, которые меня не интересуют.
В конце я заменяю ArrayList на TreeSet, чтобы удалить дубликаты.
К сожалению, здесь есть проблема, потому что возникают дубликаты ...
Я проверил в 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 ();
}
}
}