Java扫描器在读取CSV文件时读取不存在的内容

Java扫描器在读取CSV文件时读取不存在的内容,java,java.util.scanner,Java,Java.util.scanner,我有一个csv文件是这样的 Mike,Smith Scuba,Steve John,Doe java代码如下所示: Scanner file=new Scanner(new File("input.txt")); file.useDelimiter(","); while (file.hasNext()){ String s1=file.next(); String s2=file.next(); System.out.println(s1+" "+s2);

我有一个csv文件是这样的

Mike,Smith
Scuba,Steve
John,Doe
java代码如下所示:

Scanner file=new Scanner(new File("input.txt"));

file.useDelimiter(",");      
while (file.hasNext()){

   String s1=file.next();
   String s2=file.next();
   System.out.println(s1+" "+s2);

}
file.close();
我得到的结果是:

Mike Smith
Scuba
Steve
John Doe

我不明白是什么原因使得前两个名字能起作用,但中间的名字不能起作用,这是因为
Smith\nScuba
变成了一个标记。(没有
将它们分开。)

使用

解决了这个问题


如果您碰巧使用Java 8,我建议您使用以下内容:

Files.lines(Paths.get("input.txt"))
     .forEach(line -> {
         Scanner s = new Scanner(line);
         s.useDelimiter(",");
         System.out.println(s.next() + " " + s.next());
     });

此时使用
String.split
似乎更容易。生成
Scanner
s的加载速度不快…如果split完成了任务,那么请确定。因为OP使用的是扫描器,我想也许他的实际代码要复杂一点。无论如何,最好的方法可能是使用CSV库,这样像a,“b,c”,d这样的东西也能正确处理。
Files.lines(Paths.get("input.txt"))
     .forEach(line -> {
         Scanner s = new Scanner(line);
         s.useDelimiter(",");
         System.out.println(s.next() + " " + s.next());
     });