2010-12-11 106 views
38

我在想如果有人能告诉我如何使用Java字符串的格式化方法。 举例来说,如果我想我的所有输出的宽度是相同的Strings的Java输出格式

举例来说,假设我总是希望我的输出是一样的

Name =    Bob 
Age =    27 
Occupation =  Student 
Status =   Single 

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

+2

你这是什么实际上想要知道[文档](http://download.oracle.com/javase/6/docs/api/java/lang/String。HTML格式)和[格式字符串文档](http://download.oracle.com/javase/6/docs/api/java/util/Formatter.html#syntax)不显示您? – birryree 2010-12-11 18:44:34

+0

如何设置宽度,所以我的字符串总是按照宽度 – 2010-12-11 18:51:09

+1

输出,您使用宽度说明符,例如%10s为10的宽度。 – 2010-12-11 18:55:38

回答

5

编辑:这是一个非常原始的答案,但我不能删除它,因为它被接受。虽然

为什么不只是动态地生成一个空白字符串来插入到语句中。

所以,如果你希望它们都开始于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); 

把所有的在一个循环,并初始化/设置“键”,并在每次迭代之前的“价值”变量你是金。我也会使用StringBuilder类,这样更有效率。

6

如果你想有一个最低的4个字符,例如,

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

不过说真的,你需要学习如何理解文档。

+1

实际上不会导致“0005”?因为它是一个整数参数。我不确定这个“空格数量”参数是否适用于字符串。 (也就是%4s有类似的效果吗?)我不能说我在写这些字符串的时候曾经担心过我的字符串,但是我始终都用这个参数来表示数字,并且我确信它会导致领先0被添加。 – gnomed 2010-12-11 19:03:43

+2

不! %4d将使用三个前导空格进行格式化。要获得前导零,您需要%04d。我只是在IdeOne中试过这个:http://ideone.com/dzNQU – 2010-12-11 19:15:30

+0

啊,是的,你绝对正确,那就是我使用的格式化字符串。 – gnomed 2010-12-13 02:23:55

113
System.out.println(String.format("%-20s= %s" , "label", "content")); 
  • 其中%s是你的字符串的占位符。
  • ' - '使结果左对齐。
  • 20是第一个字符串的宽度

输出看起来是这样的:

label    = content 

作为参考,我建议Javadoc on formatter syntax

+13

你也可以使用'System.out.printf',即'System.out.printf(“% - 20s =%s”,“label”,“content”);' – 2013-09-06 00:07:07

+0

+1解释你为什么这样做。 .. – NazKazi 2014-05-03 13:23:48

+1

+1左对齐。 :) – aandis 2014-06-24 15:20:10

5

要回答你更新的问题,你可以做

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]); 
} 

打印

Name =    Bob 
Age =    27 
Occupation =  Student 
Status =   Single 
0

对于十进制值,你可以使用的DecimalFormat

import java.text.*; 

public class DecimalFormatDemo { 

    static public void customFormat(String pattern, double value) { 
     DecimalFormat myFormatter = new DecimalFormat(pattern); 
     String output = myFormatter.format(value); 
     System.out.println(value + " " + pattern + " " + output); 
    } 

    static public void main(String[] args) { 

     customFormat("###,###.###", 123456.789); 
     customFormat("###.##", 123456.789); 
     customFormat("000000.000", 123.78); 
     customFormat("$###,###.###", 12345.67); 
    } 
} 

输出将是:

123456.789 ###,###.### 123,456.789 
123456.789 ###.##  123456.79 
123.78  000000.000 000123.780 
12345.67 $###,###.### $12,345.67 

详情请看:

http://docs.oracle.com/javase/tutorial/java/data/numberformat.html

1
@Override 
public String toString() 
{ 
    return String.format("%15s /n %15d /n %15s /n %15s",name,age,Occupation,status); 
} 
+4

欢迎使用Stack Overflow,Amol。为什么不加入一个代码片段,为什么不加入一个关于它如何工作的小解释? – 2015-10-22 15:13:06