2010-12-11 100 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