Java从文本文件中读取

时间:2016-04-14 08:35:18

标签: java

我试图从文本文件中读取并使用列表打印出仅未重复的行。

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();

2 个答案:

答案 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);
  }
  //...