使用String.format()填充字符串?

4

我需要用破折号填充一个字符串,使其达到特定的长度,例如:

cow-----8
cow-----9
cow----10
...
cow---100

字符串的总长度必须为9。前缀“cow”是恒定的。我要迭代到一个输入数字。我可以用一种不太好看的方法实现:

String str = "cow";
for (int i = 0; i < 1000; i++) {
    if (i < 10) {
        str += "-----";
    } 
    else if (i < 100) {
        str += "----";
    }
    else if (i < 1000) {
        str += "---";
    }
    else if (i < 10000) {
        str += "--";
    }
    str += i;
}

我能用字符串格式更加简洁地完成同样的事情吗?

谢谢。


2
附注:如果您想在循环中像示例中那样追加到Strings,则可能需要使用StringBuilder - Justin Ardini
同意,我正在我的本地代码中使用它,只是为了简洁起见而这样做(现在看起来并没有真正节省任何东西)。 - user246114
1个回答

10
    int[] nums = { 1, 12, 123, 1234, 12345, 123456 };
    for (int num : nums) {
        System.out.println("cow" + String.format("%6d", num).replace(' ', '-'));
    }

这将打印:

cow-----1
cow----12
cow---123
cow--1234
cow-12345
cow123456

关键表达式在这里:

String.format("%6d", num).replace(' ', '-')

这段代码使用了String.format、数字转换,用空格右对齐6个字符的宽度。然后我们使用replace将每个空格(如果有)替换为短划线。

在这种特殊情况下,由于前缀不包含任何空格,因此您可以将奶牛带进来:

String.format("cow%6d", num).replace(' ', '-')

另请参阅


太好了,一个问题 - 我可以将格式字符串(format()的第一个参数)作为变量提供吗?我知道它应该是%6d,但是如果我想要总长度为10或20等等,我可能想要计算值“6”。我能否只需执行String str = "%%" + (fixedlen - "cow".length()) + "d",并将其作为第一个参数提供? - user246114
@user246114:我认为你想要 String fmt = "%" + w + "d";(只有一个 %),或者可能是 String fmt = String.format("%%%dd", w);,然后使用 String.format(fmt, num) - polygenelubricants
更正:我指的是十进制转换,而不是数字转换。很快会更正。 - polygenelubricants
@user246114:我不确定你具体在做什么,但你可能想看一下这里的宽度对齐格式化示例 https://dev59.com/L3A75IYBdhLWcg3wSm-4#3377719;特别是你可以结合左右对齐。 - polygenelubricants

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接