[英]Java accepts one (1) multiline string from stdin
我正在編寫一個程序,該程序可以接受“ .sql”文件,也可以接受來自stdin的SQL語句。 問題來自標准輸入:
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中)。 我該怎么做?
您提供的代碼預期輸入將在與Scanner
關聯的流的末尾終止,而不是在單行的末尾終止–看看scanner.nextLine()
調用如何在while
循環內?
如果您只想讀一行,那就擺脫循環。 而且,如果您不連接多行,那么您也不需要StringBuilder
。 但是,請確保這是您想要的,因為以多行格式編寫SQL語句是相對常見的。
要收集所有輸入,直到出現雙換行符(空白行)為止,您可以使用正則表達式在Scanner
上設置自定義定界符,並且它將通過一次調用scanner.next()
來收集輸入。
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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.