2014-10-02 91 views
0

我有一個名稱列表,也有性別和擁有該名稱的人數。如何對齊toString

例:

伊莎貝拉˚F22822

雅各中號22011

索菲亞˚F20566

伊桑中號17956

艾瑪˚F17277

我要居中對齊性別和權利統一像這樣的計數:

Isabella______F_____22822

Jacob_______M_____22011

Sophia______F________205

Ethan_______M______7956

Emma_______F____ 17277

當我嘗試格式化編譯whenI嘗試運行它,但得到的java.util.IllegalFormatPrecisionException錯誤。

public String toString() 
{ 
     return String.format("%.30s%1.15c%7.d", Name, Sex, Count); 

} 
+0

是'Name','Sex'和'Count'字符串變量嗎?如果是這樣,他們肯定應該是小寫字母。 – 2014-10-02 15:46:10

+1

IMO在toString()中進行格式化並不是一個好主意。您的格式特定於您目前的用途,因此您需要一種方法以指定的格式輸出字符串。但是,如果該方法不是toString – ControlAltDel 2014-10-02 15:47:41

+0

,你的類將更具可重用性。舉個簡單的例子。 – talex 2014-10-02 15:49:29

回答

0

下面的代碼沒有測試 - 在這裏編碼的頁面上,它可能很簡單,但手工的方式做到這一點:

public String spc(int n) 
{ 
    StringBuilder sb = new StringBuilder(); 
    for (int i=0; i<n; i++) sb.append(" "); 
    return sb.toString(); 
} 

public String toString() 
{ 
    StringBuilder sb = new StringBuilder(); 
    sb.append(name).append(spc(20 - name.length())); 
    sb.append(sex); 
    sb.append(spc(20 - count.length())).append(count); 
    return sb.toString(); 
} 

留在20位排列,不對齊,計數右對齊。當然,您仍然可以使用String.format()格式化值,您還會看到我已更改變量的大小寫,性別count的大小寫。我也假設他們已經是字符串了。