Java从stdin接受一(1)个多行字符串
我正在编写一个程序,它既可以接受“.sql”文件,也可以接受stdin中的sql语句。问题来自标准DIN: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
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