在java中使用printf换一个新行?%n是否正确?

Bet*_*ith 7 java string printf

新手在这里,但我最终在我的智慧.我已经完成了我的程序,但是在打印时只需要格式化方面的帮助.

if(count == 3)
    System.out.printf ("%-15s %15s %15s %15s %15s %n", n, " is compatible with 
                         ",dates[k],dates[k+1],dates[k+2]);
Run Code Online (Sandbox Code Playgroud)

我的输出是

Stacey Francis   is compatible with     Owen Farrell   Jack Clifford  Joshua Watkins 
Run Code Online (Sandbox Code Playgroud)

我希望我的输出是(不重复斯泰西弗朗西斯名称或"兼容":

Stacey Francis   is compatible with  Owen Farrell

                          Jack Clifford

                          Joshua Watkins
Run Code Online (Sandbox Code Playgroud)

只是想知道如何解决这个问题?

谢谢,

科斯蒂

Mar*_*eel 9

是的,%n是printf的换行符.请参阅java.util.Formatter的文档,特别是转换表,它指定:

' n'行分隔符结果是特定于平台的行分隔符

您的输出目前只有一个换行符,而不是您似乎想要它们的点.您需要使用以下格式:

"%-15s %15s %15s %n %15s %n %15s %n"
Run Code Online (Sandbox Code Playgroud)

(可能还有一些标签用于对齐).


Roh*_*ain 7

%n应该有效。但问题是,您刚刚在格式字符串的末尾使用了它。您需要将其插入适当的位置:-

"%-15s %15s %15s %n %45s %n %45s"
Run Code Online (Sandbox Code Playgroud)

您还可以"\n"在格式说明符之间使用来打印换行符:-

System.out.printf ("%-15s %15s %15s \n %45s \n %45s", 
                     n, " is compatible with ", dates[k],dates[k+1],dates[k+2]);
Run Code Online (Sandbox Code Playgroud)

此外,我已将length最后两个名称从15增加到45,以将它们格式化在前一个名称下方。