我有一个文本文件。我想制作一组4行并检查这4行是否是唯一的。如果它们是唯一的,则将其复制到另一个文本文件中。
file.txt包含:
abc
12:12:11
john
12/25/2014
abc
12:12:11
doe
12/25/2014
abc
12:12:11
john
12/25/2014
新的txt文件应该只显示。
abc
12:12:11
john
12/25/2014
abc
12:12:11
doe
12/25/2014
and delete
abc
12:12:11
john
12/25/2014
有没有办法在Java中这样做?我无法弄清楚如何使用LinkedHashSet来获得结果。
答案 0 :(得分:1)
因为你真正拥有的是两行而不是一行,所以事情比简单地逐行读取并且只修剪重复更复杂。
以下是使用Java 7的解决方案:
public static void eliminateDups(final String srcfile, final String dstfile)
throws IOException
{
final StringBuilder sb = new StringBuilder();
final Set<String> seen = new HashSet<>();
final Charset charset = StandardCharsets.UTF_8;
final Path src = Paths.get(srcfile);
final Path dst = Paths.get(dstfile);
try (
final BufferedReader reader = Files.newBufferedReader(src, charset);
final BufferedWriter writer = Files.newBufferedWriter(dst, charset,
StandardOpenOption.TRUNCATE_EXISTING);
) {
String line1, line2;
while ((line1 = reader.readLine()) != null) {
line2 = reader.readLine();
sb.setLength(0);
if (!seen.add(sb.append(line1).append(line2).toString()))
continue;
writer.write(line1);
writer.newLine();
writer.write(line2);
writer.newLine();
}
}
}
对于Java 6,我建议您使用Guava及其Closer
来管理您的I / O资源。
答案 1 :(得分:0)
取决于日期是否始终保证相同:
Map
从值映射到日期。答案 2 :(得分:-1)
只需将每行放入Set中,然后将该内容写入文件即可。 (是的LinkedHashSet实现以保留顺序)