我试图从文本文件中读取并使用列表打印出仅未重复的行。
File file = new File("E:/......Names.txt");
List<String> names = new ArrayList<String>();
Scanner scan = new Scanner(file);
int j=1;
while(scan.hasNextLine() && j!=100 ){
if(!names.contains(scan.nextLine()))
names.add(scan.nextLine());
System.out.println(names);
j++;
}
scan.close();
答案 0 :(得分:3)
您应该将值存储在变量中,而不是两次调用scan.nextLine()
:
String name = scan.nextLine();
if (!names.contains(name)) {
names.add(name);
// ...
}
否则,每次拨打scan.nextLine()
时,您都会获得不同的值,因此您使用contains
检查的值与您add
的值不同。
但是,使用Set<String>
更容易,这可以保证不允许重复:
Set<String> names = new LinkedHashSet<>();
// ...
while (scan.hasNextLine() && names.size() < 100) {
if (names.add(scan.nextLine()) {
// Only runs if it wasn't there before.
}
}
答案 1 :(得分:1)
你正试图处理同一条线,但你要处理不同的线:
if(!names.contains(scan.nextLine())) //this reads a line
names.add(scan.nextLine()); //but this reads another line!
更改它:
while(scan.hasNextLine() && j!=100 ){
String nextLine = scan.nextLine();
if(!names.contains(nextLine)){
names.add(nextLine);
}
//...