2014-10-02 89 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的大小写。我也假设他们已经是字符串了。