为什么Linux下运行Java程序时输出字符串末尾会出现%字符?
原因说明
末尾的%不属于Java程序的输出内容,是你使用的Zsh、Fish等新式Shell的默认特性:当运行的进程输出内容的末尾没有换行符\n时,Shell会主动追加一个高亮的%并自动换行,避免后续的命令提示符和程序输出拼接在同一行影响阅读。
你当前代码全程使用System.out.print()方法输出内容,该方法只会原样输出传入的字符串,不会自动追加换行符,最终程序输出的DooBeeDooBeeDo末尾没有换行,因此被Shell打上了%标记。
你可以执行echo -n "test"命令验证:如果输出结果为test%,即可确认是Shell的特性,和Java版本、代码逻辑无关。
解决方法
仅需保证程序最终输出的末尾携带换行符即可,推荐两种修改方案:
方案1:最后一次输出改用println方法
System.out.println()会在输出传入内容后自动追加换行符,修改if判断内的输出语句即可:
if( x == 3) { System.out.println("Do"); }
方案2:手动添加换行符
如果要继续使用print方法,也可以手动在输出内容末尾加转义字符\n:
if( x == 3) { System.out.print("Do\n"); }
修改后重新执行编译、运行命令,末尾的%就会消失。
内容的提问来源于stack exchange,提问作者adi.
相关产品推荐
相关产品推荐

