Java从stdin接受一(1)个多行字符串

Java从stdin接受一(1)个多行字符串,java,stdin,Java,Stdin,我正在编写一个程序,它既可以接受“.sql”文件,也可以接受stdin中的sql语句。问题来自标准DIN: Scanner scanner = new Scanner(new BufferedInputStream( System.in)); System.out.println("Enter SQL statements"); StringBuilder stringBuilder = new StringBuilder(); while (scanner.hasNext()) { s

我正在编写一个程序,它既可以接受“.sql”文件,也可以接受stdin中的sql语句。问题来自标准DIN:

Scanner scanner = new Scanner(new BufferedInputStream( System.in));
System.out.println("Enter SQL statements");
StringBuilder stringBuilder = new StringBuilder();
while (scanner.hasNext()) {
    stringBuilder = stringBuilder.append(scanner.nextLine()).append("\n");
}
sqlQuery=stringBuilder.toString();

它是根据答案修改的。但是,当我将语句输入或粘贴到终端中时,它不会进入下一步,相反,语句会不断追加
“\n”
。我希望用户输入在点击
enter
后结束(与Java中的类似)。我该怎么做?

您提供的代码预期输入将在与
扫描仪相关联的流的末尾终止,而不是在单行的末尾终止——请参见
扫描仪.nextLine()
调用如何在
while
循环中终止


如果你只想读一行,那就去掉循环。此外,如果没有连接多行,那么也不需要
StringBuilder
。但是,请确保这是您想要的,因为SQL语句以多行格式编写是比较常见的。

您提供的代码预期输入将在与
扫描仪相关联的流的末尾终止,而不是在单行的末尾终止——请参见
扫描仪.nextLine()的用法
调用在
循环中,而
循环


如果你只想读一行,那就去掉循环。此外,如果没有连接多行,那么也不需要
StringBuilder
。但是,请确保这是您想要的,因为SQL语句以多行格式编写是比较常见的。

要收集所有输入,直到出现一个双新行(空行),您可以使用正则表达式在
扫描仪上设置一个自定义分隔符,它只需调用
扫描仪即可收集输入。next()


要收集所有输入直到出现一个双新行(空行),可以使用正则表达式在
扫描仪上设置自定义分隔符,它只需调用
扫描仪。next()
,即可收集输入


检查用户是否输入了空字符串?检查用户是否输入了空字符串?注意:文本模式SQL接口通常接受多行输入。他们通常寻找某种类型的分隔符来识别查询的结尾,例如一行中的句号或分号。但是一些sql语句由多个命令组成,例如多表插入或创建视图,然后从中提取数据it@DylanChensky,多个命令不是问题,因为您可以按顺序输入它们。多行单个命令是另一回事,如果您想支持这些命令,那么您就有一个基本问题:程序应该如何将给定的行识别为命令中的最后一行,而不是期望后面有其他行?在我之前的评论中,我已经说过一两句话了。注意:文本模式SQL接口通常接受多行输入。他们通常寻找某种类型的分隔符来识别查询的结尾,例如一行中的句号或分号。但是一些sql语句由多个命令组成,例如多表插入或创建视图,然后从中提取数据it@DylanChensky,多个命令不是问题,因为您可以按顺序输入它们。多行单个命令是另一回事,如果您想支持这些命令,那么您就有一个基本问题:程序应该如何将给定的行识别为命令中的最后一行,而不是期望后面有其他行?在我之前的评论中,我已经说过一两句话了。
Scanner scanner = new Scanner(System.in);

System.out.println("Enter SQL statements");

scanner.useDelimiter("\n\n"); // an empty line
String sqlQuery = scanner.next();
scanner.reset(); // resets the delimiter