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()。
答案 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