Java String.format向整数添加空格

时间:2016-06-13 13:47:20

标签: java

我有一小段代码,我不理解输出。

此输出为我的字符串格式文本添加空格。我做错了什么?

public class HelloWorld{

     public static void main(String []args){
        int a1 = 540;
        int a2 = 492;
        int a3 = 200;
        int a4 = 500;
        int a5 = 600;
        String a = "/share.html?title=%1s&description=%2s&image=%3s&width=%4s&height=%5s";
        String b = String.format(a, a1, a2, a3, a4, a5);
        System.out.println(b);
     }
}

输出结果为:

/share.html?title=540&description=492&image=200&width= 500&height=  600

为什么最后一个宽度和高度上有这些空格?

5 个答案:

答案 0 :(得分:5)

从格式说明符中删除数字:

String a = "/share.html?title=%s&description=%s&image=%s&width=%s&height=%s";

使用格式说明符中的数值,就像指定输出的最小宽度一样 - 这就是为什么你没有看到前三个值的任何空格的原因。 / p>

如果要引用特定参数而不是让格式化程序按照指定的顺序对它们进行评估,则可以使用n$形式指定参数索引,其中n是引用参数的索引(如1$2$,...)。

有关详细信息,另请参阅java.util.Formatter

您可以指定%s而不是%d,因为您的所有参数都是int类型。

答案 1 :(得分:2)

因为您添加了长度为4和5的字符串,并且您的值为3个字符。

您应该使用%d来格式化十进制。

s前面的数字是长度而不是位置。

答案 2 :(得分:2)

general structure of the format specifier

%[argument_index$][flags][width][.precision]conversion

如果您尝试引用参数索引,则需要在数字后面加$,例如:

height=%5$s

但是,由于您只使用一次参数,并且按顺序,您只需使用:

height=%s

答案 3 :(得分:1)

%4s表示应该输出总共4个字符。你的号码有3个字符。因此,它显示一个" "。因此,您需要从格式字符串中删除所有数字。

答案 4 :(得分:1)

试试这个:

        int a1 = 540;
        int a2 = 492;
        int a3 = 200;
        int a4 = 500;
        int a5 = 600;
        String a = "/share.html?title=%s&description=%s&image=%s&width=%s&height=%s";
        String b = String.format(a, a1, a2, a3,a4,a5);
        System.out.println(b);

让我知道它是否有效