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

标签 java string

我需要从控制台逐字节读取输入,然后打印出来,然后检查它是否等于“exit”。

这是我的代码:

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 退出

如果我检查是否input.equals("exit")它说不。我的猜测是字符串不是以 null 结尾的,因为这是我在汇编中遇到类似问题时出现的问题,但我似乎无法修复此 Java 代码。我是否能正确地从屏幕上读取字节?

最佳答案

我假设您在 Windows 计算机上工作,对吧?

问题是,如果你在控制台输入一些内容,你将输入:exit\r\n,因为\r\n是Windows的行分隔符.

现在,由于您的检查 while (inChar != '\n')if (inChar != '\n'),但您将 \r 附加到您的 input 字符串中。 \rcarriage return它将光标移动到行的开头。

现在让我们检查您的输出:

System.out.println("Hello " + input + "AQ");

您正在打印此内容:

Hello exit\rAQ

某些控制台(不是 Eclipse 或 IDEA 等 IDE 中的控制台)会解释 \r 并移动光标。这意味着,您将光标移动到行首,然后打印 "AQ",这会覆盖前两个字母 "He",因此输出:

AQllo exit

要解决此问题,只需添加对 \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");

关于Java附加随机字符并覆盖字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31095021/

相关文章:

java - Android - 应用程序仅在第一次启动时崩溃,但第二次运行

c# - 获取字符串中两个字符串之间的字符串

JavaScript : String split() Method only push unique char

python - 在 Python 中延迟初始化的字符串

java - 从 baseActivity android 调用一个函数

java - "Object[] x"和 "Object x[]"之间有什么区别吗?

java - Spring 应用程序正在从我的所有属性文件加载属性,而不仅仅是我在上下文 :property-placeholder 中指定的属性

java - 在上传 Amazon S3 之前检查病毒?

PHP Mysql自动报价?

java - 比较 arraylist 2d java 中的字符串