【发布时间】:2018-04-20 10:45:42
【问题描述】:
我找到了一个 java 程序,它可以将 java 中的两个文本文件相互比较,并使其列出不在两个文本文件中的所有行/条目。
package Exercise1;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
public class main {
public static void main(String[] args) throws IOException {
String first = "migratielijst.txt";
String second = "complete.txt";
BufferedReader fBr = new BufferedReader(new FileReader(first));
BufferedReader sBr = new BufferedReader(new FileReader(second));
ArrayList<String> strings = new ArrayList<String>();
while ((first = fBr.readLine()) != null) {
strings.add(first);
first.replaceAll("[^0-9.]", "");
}
fBr.close();
while ((second = sBr.readLine()) != null) {
if (!(strings.contains(second))) {
System.out.println(second);
}
}
sBr.close();
}
}
我发现删除所有字符的行(如下)没有做我想做的事。
first.replaceAll("[^0-9.]", "");
假设文本文件如下所示:
8271910
8271911
//8271912
8271913
8271914
8271915
与之比较的文本文件如下所示:
8271910
8271911
8271912
8271913
8271914
8271915
它会列出 8271912,因为它在第一个文本文件中被注释掉了。 现在,如果我修改第一个文本文件并在其前面加上一个名称,我希望我的程序删除字符(比较时不考虑它们)。 示例:
Anya 8271910
8271911
//8271912
8271913
8271914
8271915
问题是我的程序返回这个:
8271910
8271912
我该如何解决这个问题?
【问题讨论】:
-
我不明白你的比较逻辑,或者为什么它一定会起作用。这些 ID 是否以某种方式排序?如果不是,那么如何在不先读取两个文件的情况下报告两个文件中都没有的条目?
-
在 Java 中,字符串是不可变的。查看第一个循环逻辑。
-
另外,不要像使用 'first' 那样重用变量。使用有意义的名称,例如 migrateFilename。
标签: java bufferedreader string-comparison