我有一个小项目。
项目将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 ();
}
}
}
答案 0 :(得分:0)
在执行str.replace之前,您可以尝试str.trim删除任何空格或不需要的和看不见的字符。
str = str.trim()