我需要逐字节地从控制台读取输入,然后将其打印出来,然后检查它是否等于"退出"。
这是我的代码:
int inChar = 1;
String input = "";
char correctChar;
// code
try {
while (inChar != '\n') {
inChar = System.in.read();
correctChar = (char) inChar;
if (inChar != '\n') {
input += correctChar;
} // end if
} // end while
} // end try
catch (IOException e) {
System.out.println("Error reading from user");
} // end catch
System.out.println("Hello " + input + "AQ");
出于某种原因,当我运行代码并输入exit时,它会打印到屏幕上:
AQllo exit
如果我检查input.equals("exit")
是否拒绝。我的猜测是某种程度上字符串不是null终止,因为当我在汇编中遇到类似这样的东西时,这就是问题,但我似乎无法修复这个Java代码。我甚至可以从屏幕上正确读取字节吗?
答案 0 :(得分:3)
我假设您正在使用Windows计算机,对吧?
问题是,如果您向控制台输入内容,则输入:exit\r\n
,因为\r\n
是Windows的行分隔符。
现在,你“忽略了”#34;由于您的\n
和while (inChar != '\n')
支票if (inChar != '\n')
,但您将\r
追加到input
字符串中。 \r
是carriage return,它将光标移动到行的开头。
现在让我们检查你的输出:
System.out.println("Hello " + input + "AQ");
你打印这个:
你好退出\ rAQ
某些控制台(不是Eclipse或IDEA等某些IDE中的控制台)会解释\r
并移动光标。这意味着,您将光标移动到行的开头,然后打印" AQ" ,它会覆盖前两个字母" He& #34; ,因此输出:
AQllo退出
要解决此问题,只需为\r
添加额外检查:
int inChar = 1;
String input = "";
char correctChar;
// code
try {
while (inChar != '\n' && inChar != '\r') {
inChar = System.in.read();
correctChar = (char) inChar;
if (inChar != '\n' && inChar != '\r') {
input += correctChar;
} // end if
} // end while
} // end try
catch (IOException e) {
System.out.println("Error reading from user");
} // end catch
System.out.println("Hello " + input + "AQ");
答案 1 :(得分:-2)
我会试试这个:
int inChar = 1;
String input = "Hello ";
char correctChar;
// code
try {
while (inChar != '\n') {
inChar = System.in.read();
correctChar = (char)inChar;
if (inChar != '\n') {
input += correctChar;
} // end if
} // end while
input+="AQ";
} // end try
catch (IOException e){
System.out.println("Error reading from user");
} // end catch
System.out.println(input);