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

时间:2017-03-15 19:52:34

标签: java stdin

我正在编写一个程序,可以接受" .sql"从stdin文件或接受SQL语句。问题来自stdin:

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

从答案here修改。但是当我将语句输入或粘贴到终端时,它不会进入下一步,而是继续追加"\n"语句。我希望用户输入在它们点击enter后结束(类似于this problem但在Java中)。我该怎么做?

2 个答案:

答案 0 :(得分:1)

您提供的代码预计输入将在与Scanner关联的流的末尾终止,而不是在单行的末尾终止 - 请参阅scanner.nextLine()调用的方式在while循环中?

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

答案 1 :(得分:1)

要收集所有输入直到双重换行(空白行),您可以使用正则表达式在Scanner上设置自定义分隔符,它将通过一次调用来收集输入{ {1}}。

scanner.next()