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

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

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

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

它生成一个长度为32的String ,并且左边的内容为0: 00000000000000000000000000202022

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

 String sendID = "AABB"; 

我想要一个输出,如: 0000000000000000000000000000AABB

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

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

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

如果你真的想使用String.format ,你可以这样做,

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

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

编辑 :感谢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'); 

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

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

 public class App { public static void main(String[] args) { System.out.println(leftpad("mm", 2, '@')); System.out.println(leftpad("mm", 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); } } 

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

这就是我使用base jdks String.format函数解决这个问题的方法

 String sendId="AABB"; int length=20; String.format("%"+length+"s",sendId).replaceAll(" ","0")