我正在尝试从控制台读取文本行。线数预先不知道。 BufferedReader.readLine()方法读取一行但在最后一行之后它等待来自控制台的输入。应该怎么做以避免这种情况?
请参阅下面的代码段:
public static String[] getLinesFromConsole() {
String strLine = "";
try {
// Get the object of DataInputStream
InputStreamReader isr = new InputStreamReader(System.in);
BufferedReader br = new BufferedReader(isr);
String line = "";
while ((line = br.readLine()) != null)
strLine += line + "~"; //edited
isr.close();
} catch (IOException ioe) {
ioe.printStackTrace();
}
return strLine.split("~");
}
答案 0 :(得分:4)
以下代码可能会修复,将文本exit
替换为您的需求特定字符串
public static String[] getLinesFromConsole() {
String strLine = "";
try {
// Get the object of DataInputStream
InputStreamReader isr = new InputStreamReader(System.in);
BufferedReader br = new BufferedReader(isr);
String line = "";
while ((line = br.readLine()) != null && !line.equals("exit") )
strLine += br.readLine() + "~";
isr.close();
} catch (IOException ioe) {
ioe.printStackTrace();
}
return strLine.split("~");
}
答案 1 :(得分:1)
从控制台读取时,您需要定义一个“终止”输入,因为控制台(与文件不同)不会“结束”(即使在程序终止后它仍继续运行)。
您的问题有几种解决方案:
将输入放在文件中并使用IO重定向:java ... < input-file
shell将使用输入文件连接您的进程,您将获得EOF。
键入控制台的EOF字符。在Linux和Mac上,它是 Ctrl + D ,在Windows上,它是 Ctrl + Z + Enter
读取空行时停止。这样,用户只需输入 Enter 。
PS:您的代码中存在错误。如果您拨打readLine()
两次,它将跳过每隔一行。