字符串的Java输出格式

Ste*_*ris 44 java formatting

我想知道是否有人可以告诉我如何使用Java字符串的格式方法.例如,如果我想要所有输出的宽度相同

例如,假设我总是希望我的输出是相同的

Name =              Bob
Age =               27
Occupation =        Student
Status =            Single
Run Code Online (Sandbox Code Playgroud)

在这个例子中,所有输出都在彼此之间整齐地格式化; 我将如何使用format方法完成此操作.

sta*_*ker 132

System.out.println(String.format("%-20s= %s" , "label", "content" ));
Run Code Online (Sandbox Code Playgroud)
  • %s是你字符串的占位符.
  • ' - '使结果左对齐.
  • 20是第一串的宽度

输出如下所示:

label               = content
Run Code Online (Sandbox Code Playgroud)

作为参考,我推荐使用格式化程序语法的Javadoc

  • 你也可以使用`System.out.printf`,即`System.out.printf("% - 20s =%s","label","content");` (18认同)
  • @JustinHarris请记住,后续的`System.out.printf`调用不会在每个输出之间添加换行符.你可以通过在格式字符串的末尾添加一个`\n`字符来解决这个问题. (2认同)

I82*_*uch 7

例如,如果您想要至少4个字符,

System.out.println(String.format("%4d", 5));
// Results in "   5", minimum of 4 characters
Run Code Online (Sandbox Code Playgroud)

  • 不!%4d将格式化为三个前导空格.要获得前导零,您需要%04d.我刚在IdeOne中试过这个:http://ideone.com/dzNQU (2认同)

Pet*_*rey 6

要回答您更新的问题,您可以这样做

String[] lines = ("Name =              Bob\n" +
        "Age =               27\n" +
        "Occupation =        Student\n" +
        "Status =            Single").split("\n");

for (String line : lines) {
    String[] parts = line.split(" = +");
    System.out.printf("%-19s %s%n", parts[0] + " =", parts[1]);
}
Run Code Online (Sandbox Code Playgroud)

版画

Name =              Bob
Age =               27
Occupation =        Student
Status =            Single
Run Code Online (Sandbox Code Playgroud)


gno*_*med 6

编辑:这是一个非常原始的答案,但我不能删除它,因为它被接受.请参阅下面的答案,以获得更好的解决方案

为什么不动态生成空白字符串以插入语句.

所以如果你想让他们全都从第50个角色开始......

String key = "Name =";
String space = "";
for(int i; i<(50-key.length); i++)
{space = space + " ";}
String value = "Bob\n";
System.out.println(key+space+value);
Run Code Online (Sandbox Code Playgroud)

将所有这些放在一个循环中并在每次迭代之前初始化/设置"键"和"值"变量,你就是金色的.我也会使用StringBuilder更高效的类.