簡體   English   中英

Java從stdin接受一(1)個多行字符串

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM