如何在 java 中的 %s 中用变量而不是硬编码数字填充字符串

how to string pad with variables instead of hard coded numbers inside %s in java

我正在尝试用空格向右填充一个字符串,以使不同的字符串长度在同一点对齐。我尝试使用以下内容来做到这一点。但是,我不知道如何在 %s 中使用变量 namePad,就像我们使用实数一样(例如使用 %(namePad)s 而不是 %5s)

 public String toString() {
    int namePad = 10-name.length();
    return String.format(id + " -" + " %-5s" + "%10s" , name, "");
}

输出样本:

All customers:
1 - Bill Gates          *// padding all the strings to here
2 - Trump           *  
3 - Tali           *            
4 - James Bond          *         

您可以使用 "%-"+namePad+"s" 而不是 "%-5s"

尽管如此,我不确定您是否真的需要该变量。您正在使用 String.format,但未提供任何格式变量,因此请改用此方法。

String.format("%d - %-21s", id, name);

或者,和以前一样

int pad = 21;
return String.format("%d - %-"+pad+"s*", id, name);

例如,(添加 * 以显示填充)

static class Person {
    int id;
    String name;

    public Person(int id, String name) {
        this.id = id; this.name = name;
    }

    public String toString() {
        return String.format("%d - %-21s*", id, name);
    }
}

public static void main (String[] args) throws java.lang.Exception
{
    Person[] people = { 
        new Person(1, "Bill Gates"),
        new Person(2, "Trump"),
        new Person(3, "Tail"), 
        new Person(4, "James Bond")
    };

    for (Person p : people) {
        System.out.println(p);
    }
}

输出

1 - Bill Gates           *
2 - Trump                *
3 - Tail                 *
4 - James Bond           *