我们可以使用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")