Java附加随机字符并覆盖字符串

时间:2015-06-28 00:38:55

标签: java string

我需要逐字节地从控制台读取输入,然后将其打印出来,然后检查它是否等于"退出"。

这是我的代码:

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代码。我甚至可以从屏幕上正确读取字节吗?

2 个答案:

答案 0 :(得分:3)

我假设您正在使用Windows计算机,对吧?

问题是,如果您向控制台输入内容,则输入:exit\r\n,因为\r\n是Windows的行分隔符。

现在,你“忽略了”#34;由于您的\nwhile (inChar != '\n')支票if (inChar != '\n'),但您将\r追加到input字符串中。 \rcarriage 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);