Java System.in 上的 BufferedReader 忽略第一行/命令
Java BufferedReader on System.in ignores first line / command
我已经为 java 创建了一个简单的控制台应用程序,使用 JavaBufferedReader 从终端读取命令。由于某种原因,发出的第一个命令总是被完全忽略。即使在调试时也没有读取任何值并且输入字符串仍未初始化。发出第二个命令后,输入字符串获得我在控制台中写入的值。
我正在使用 IntelliJ 和带有 gradle 和 JDK 11 的集成终端。
我完全看不出任何原因,为什么第一个命令被完全忽略了。
BufferedReader inReader = new BufferedReader(new InputStreamReader(System.in));
主要 shell 功能
public void runMainLoop() throws IOException {
boolean quit = false;
while (!quit) {
System.out.print("prompt> ");
final String input = inReader.readLine(); // <-- This input gets no value after pressing "enter".
if (input == null) { // all other "enter" after the first one are working
break;
}
try (final Scanner scanner = new Scanner(input)) {
scanner.useDelimiter("\s+");
if (!scanner.hasNext()) {
printError("No command specified!");
break;
}
switch (scanner.next().toLowerCase()) {
case "help":
printHelpMessage();
break;
case "quit":
quit = true;
println("Terminate...");
break;
default:
printError("Unknown command given.");
printHelpMessage();
break;
}
}
}
}
我建议应用分而治之的调试策略:从绝对最小的工作开始,然后添加部分程序,直到它停止工作。然后检查最后添加的部分。
这对我有用,所以我猜你的问题出在其他地方:
BufferedReader inReader = new BufferedReader(new InputStreamReader(System.in));
String input = inReader.readLine();
System.out.println(input);
现在我在我的 IntelliJ 中测试了你的代码。当按没有值作为第一个命令的 enter 时,它会打印“没有指定命令!”对于其他命令,它会根据您的开关案例打印预期的答案。 (作为第一个命令,也在第一个命令之后)
我的意思是它对我有用。请详细说明您的情况出了什么问题。
我已经为 java 创建了一个简单的控制台应用程序,使用 JavaBufferedReader 从终端读取命令。由于某种原因,发出的第一个命令总是被完全忽略。即使在调试时也没有读取任何值并且输入字符串仍未初始化。发出第二个命令后,输入字符串获得我在控制台中写入的值。
我正在使用 IntelliJ 和带有 gradle 和 JDK 11 的集成终端。 我完全看不出任何原因,为什么第一个命令被完全忽略了。
BufferedReader inReader = new BufferedReader(new InputStreamReader(System.in));
主要 shell 功能
public void runMainLoop() throws IOException {
boolean quit = false;
while (!quit) {
System.out.print("prompt> ");
final String input = inReader.readLine(); // <-- This input gets no value after pressing "enter".
if (input == null) { // all other "enter" after the first one are working
break;
}
try (final Scanner scanner = new Scanner(input)) {
scanner.useDelimiter("\s+");
if (!scanner.hasNext()) {
printError("No command specified!");
break;
}
switch (scanner.next().toLowerCase()) {
case "help":
printHelpMessage();
break;
case "quit":
quit = true;
println("Terminate...");
break;
default:
printError("Unknown command given.");
printHelpMessage();
break;
}
}
}
}
我建议应用分而治之的调试策略:从绝对最小的工作开始,然后添加部分程序,直到它停止工作。然后检查最后添加的部分。
这对我有用,所以我猜你的问题出在其他地方:
BufferedReader inReader = new BufferedReader(new InputStreamReader(System.in));
String input = inReader.readLine();
System.out.println(input);
现在我在我的 IntelliJ 中测试了你的代码。当按没有值作为第一个命令的 enter 时,它会打印“没有指定命令!”对于其他命令,它会根据您的开关案例打印预期的答案。 (作为第一个命令,也在第一个命令之后) 我的意思是它对我有用。请详细说明您的情况出了什么问题。