我们可以使用String.format()来填充/前缀一个具有所需长度的字符吗?

时间:2013-03-26 10:55:13

标签: java string format

可以java.lang.String.format(String str, String str1)用于添加特定字符的前缀。

我可以为以下数字执行此操作:

int sendID = 202022;
String usiSuffix = String.format("%032d", sendID);

它生成长度为32的String和带有0s的左边界:00000000000000000000000000202022

当sendID是String时如何实现同样的目的:

String sendID = "AABB";

我想要一个输出:0000000000000000000000000000AABB

5 个答案:

答案 0 :(得分:16)

您可以使用这种hackish方式获得输出:

String sendID = "AABB";
String output = String.format("%0"+(32-sendID.length())+"d%s", 0, sendID);

演示:http://ideone.com/UNVjqS

答案 1 :(得分:11)

如果您真的想使用String.format

,可以执行以下操作
String sendID = "AABB";
String.format("%32s", sendID ).replace(' ', '0')

String.format以外,您可以找到许多解决方案here

修改:感谢Brian指出了这个问题。以上不适用于带空格的输入。你可以尝试如下。但我不会建议下面的操作,因为它有太多的字符串操作。

String sendID = "AA BB";
String suffix = String.format("%32s", "").replace(' ', '0') + sendID;
sendID = suffix.substring(sendID.length());

您也可以尝试使用StringUtils.leftPad

StringUtils.leftPad(sendID, 32 - sendID.length(), '0');

答案 2 :(得分:5)

您无法使用String.format()填充任意字符。也许Apache Commons StringUtils.leftPad()可用于简洁的解决方案?请注意,还有一个StringUtils.rightPad()

答案 3 :(得分:2)

如果有人在将来需要它,我只需添加一些Java 8代码:

public class App {
    public static void main(String[] args) {
        System.out.println(leftpad("m m", 2, '@'));
        System.out.println(leftpad("m m", 5, '@'));
    }

    static String leftpad(String s, int nb, char pad) {
        return Optional.of(nb - s.length())
                .filter(i -> i > 0)
                .map(i-> String.format("%" + i + "s", "").replace(" ", pad + "") + s)
                .orElse(s);
    }

}

此版本支持添加任何字符作为填充

答案 4 :(得分:0)

这就是我使用base jdks String.format函数

解决这个问题的方法
String sendId="AABB";
int length=20;
String.format("%"+length+"s",sendId).replaceAll(" ","0")