格式化字符串

LTH*_*LTH 1 java

所以我正在编写一个应该模拟飞机货物的类,而我在格式化类的toString()方法时遇到了麻烦.以下代码:

public class Cargo 
{
    private String label;
    private int weight, height, width, length;

    public String toString()
    {
        return String.format("%s%s\t\t%-7s%-2s%-5d%-11s%-2s%-3d%-2s%-3d%-2s%d",
                getLabel(), ":", "Weight", "=", getWeight(), "Dimensions",
                "=", getHeight(), "X", getWidth(), "X", getLength());
    }

    public static void main(String[] args)
    {
        Cargo cargo1 = new Cargo("Bill's Beans", 1200, 20, 15, 30);
        Cargo cargo6 = new Cargo("Chicago Bulls", 1000, 10, 10, 10);
        Cargo cargo7 = new Cargo("Lots of Meat", 3000, 20, 20, 20);
        Cargo cargo8 = new Cargo("Tammy's Tomatoes", 600, 6, 6, 6);

        System.out.println(cargo1.toString());
        System.out.println(cargo6.toString());
        System.out.println(cargo7.toString());
        System.out.println(cargo8.toString());
    }
}
Run Code Online (Sandbox Code Playgroud)

生成此输出:

Bill's Beans:       Weight = 1200 Dimensions = 20 X 15 X 30
Chicago Bulls:      Weight = 1000 Dimensions = 10 X 10 X 10
Lots of Meat:       Weight = 3000 Dimensions = 20 X 20 X 20
Tammy's Tomatoes:       Weight = 600  Dimensions = 6  X 6  X 6
Run Code Online (Sandbox Code Playgroud)

正如你所看到的,除了"Tammy's Tomatoes"之外,一切都很好.我怎样才能解决这个问题?谢谢.

ebo*_*oix 5

除了"Tammy's Tomatoes"之外,这一切都很好,因为你正在使用标签.在这种情况下,您的标签长度​​为4个字符.虽然"Bill's Beans:"是13个字符,"Chicago Bulls:"是14,而"Lots of Meat:"是13,"Tammy's Tomatoes:"是17.

13/4 = 3
14/4 = 3
13/4 = 3
17/4 = 4
Run Code Online (Sandbox Code Playgroud)

或者至少那是程序员的想法;)

因此,当您在最后一个选项卡上放置另一个选项卡时,它会在其余选项卡后启动4个字符.

您可以通过调整选项卡的数量来解决此问题,具体取决于公司名称的字符数.

假设您希望尺寸从第7组4个空格开始.

首先,计算名称占用的空间量.除以四(如上所述).

从7中减去数字.所以Tammy的西红柿会是7-4=3.运行一个循环,将3"\ t"添加到结果中(您要添加它们的位置).

所以最后,你的代码看起来像这样:

    String result = String.format("%s%s", getLabel(), ":");

    int tabs = result.length()/4;
    int desiredTabs = 7;
    for(int i = 0; i < desiredTabs-tabs) {
        result += "\t";
    }
    result += String.format("%-7s%-2s%-5d%-11s%-2s%-3d%-2s%-3d%-2s%d",
            "Weight", "=", getWeight(), "Dimensions",
            "=", getHeight(), "X", getWidth(), "X", getLength());
    return result;
Run Code Online (Sandbox Code Playgroud)

编辑回答评论中的问题:

好吧,你真的不需要使用String.format().实际上你可以只追加变量(例如result + getWidth()).我刚刚使用,String.format()因为那是你用过的.您可以将其重写为:

    String result = String.format("%s%s", getLabel(), ":");

    int tabs = result.length()/4;
    int desiredTabs = 7;
    for(int i = 0; i < desiredTabs-tabs) {
        result += "\t";
    }
    result += "Weight = " + getWeight() + " Dimensions = " + getHeight() + " X " + getWidth() + " X " + getLength();

    return result;
Run Code Online (Sandbox Code Playgroud)

更简单:)