Java程序中的Bizarre System.out.println()

时间:2010-08-04 15:57:05

标签: java linux string debugging char

String messageFile = ... // Assume messageFile SHOULD have the string "MESSAGE"
System.out.println("The messageFile is: " + messageFile + "!!");

通常,人们会期望输出上述命令:

The messageFile is: MESSAGE!!!!

但是,我收到了这个:

!!e messageFile is: MESSAGE

看看上面的说法如何,“!!”点似乎环绕着消息。我的理论是:

String messageFile = ... 

包含的字符多于我假设的“MESSAGE”。结果,它将下一个输入(在本例中为“!!”)包装到System.out.println()消息的前面。

造成这个的是什么角色?

额外信息:

顺便说一句,messageFile是通过将命令行参数传递给java类myClassA来初始化的。 myClassA的构造函数使用super()将messageFile参数传递给myClassB。 myClassB将messageFile传递给function()。

4 个答案:

答案 0 :(得分:16)

我猜你在\r变量中有一个错误的回车符{messageFile),它没有换行符(\n)。

编辑 - 按预期进行测试:

class Println {
        public static void main(String[] args) {
                System.out.println("xxxx this \rTEST");
        }
}

输出:

TEST this 

答案 1 :(得分:2)

您的消息变量可能在末尾包含'\ n'(回车符)或'\ n'(换行符)字符。这可能会导致光标在打印感叹号之前返回到第一列。

答案 2 :(得分:1)

要进行调试,您应该通过codePointAt打印messageFile的每个字符的代码点。 因此,您可以看到messageFile

的内容

答案 3 :(得分:0)

用换行符替换文件中的所有回车符,然后用单换行符替换所有双换行符:

messageFile.replace('\r', '\n').replace("\n\n", "\n)

应禁止回车:D