将用户输入添加到Java程序

时间:2018-02-04 16:08:17

标签: java csv

我正在用Java创建一个CSV解析器库。到目前为止,我有以下代码:

但是当我尝试将用户输入包含在("输入分隔符")部分时,我一直收到错误:

Exception in thread "main" java.util.NoSuchElementException: No line found
at java.util.Scanner.nextLine(Unknown Source)
at demo.CSV.main(CSV.java:19)

另外,请你帮我弄清楚如何创建一个可以使用该库的测试应用程序。

谢谢。

package demo;

import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;

public class CSV {

public static void main(String[] args) throws FileNotFoundException {

Scanner x = new Scanner(System.in);
System.out.println("Enter the File");
String s = x.next();
x.close();   
Scanner scanner = new Scanner(new File(s));
scanner.useDelimiter(",(?=(?:[^\"]*\"[^\"]*\")*[^\"]*$)");
System.out.println("Enter delimiter");
Scanner scanner1 = new Scanner(System.in);
String format = scanner1.nextLine();
while(scanner.hasNext()){
System.out.println(scanner.next()+format);        
}
scanner.close();
}
}

1 个答案:

答案 0 :(得分:1)

问题可归结为这样一个事实,即你没有正确使用Scanner.nextLine(),而且输入文件是空的。

当您使用nextLine()时,需要将其封闭在一个循环中,该循环在尝试使用hasNextLine()读取该行之前检查输入源是否具有使用nextLine()的下一行

您的代码假设没有先检查就有下一行。同时,您的输入文件为空,因此您获得NoSuchElementException

而不是像这样盲目地进入:

String format = scanner1.nextLine();

用这个替换该行:

String format = null;

while(scanner1.hasNext())
{
    format = scanner1.nextLine();
}

然后确保生成一个实际上有一行或多行的输入文件。