12

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

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

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

它的 aString长度为 32 并用 0s 填充:00000000000000000000000000202022

当 sendIDString类似于:

String sendID = "AABB";

我想要一个像这样的输出:0000000000000000000000000000AABB

4

5 回答 5

17

您可以使用这种骇人听闻的方式来获取输出:

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

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

于 2013-03-26T11:10:37.983 回答
13

如果您真的想使用,您可以执行以下操作String.format

String sendID = "AABB";
String.format("%32s", sendID ).replace(' ', '0')

除了你可以在这里String.format找到许多解决方案。

编辑:感谢布赖恩指出问题。以上不适用于带空格的输入。您可以尝试如下。但我不会建议下面的操作,因为它有太多的字符串操作。

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');
于 2013-03-26T11:03:02.477 回答
5

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

于 2013-03-26T11:04:05.520 回答
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);
    }

}

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

于 2016-03-25T10:15:11.827 回答
0

这就是我使用基本 jdks String.format 函数解决此问题的方法

String sendId="AABB";
int length=20;
String.format("%"+length+"s",sendId).replaceAll(" ","0")
于 2014-04-15T07:35:52.237 回答