1. 概述

在本篇教程中,我们来聊聊如何在 Java 中对字符串进行“填充”(padding)操作。重点放在 左填充 上,即在字符串左侧补充空格或零,直到达到指定长度。

右填充的实现方式其实差不多,我们会在适当的地方指出区别。

2. 使用自定义方法进行字符串填充

Java 的 String 类本身并没有提供便捷的填充方法,所以我们得自己动手写。

先来看个预期效果:

assertEquals("    123456", padLeftZeros("123456", 10));
assertEquals("0000123456", padLeftZeros("123456", 10));

2.1. 使用 StringBuilder

通过 StringBuilder 结合一些逻辑控制,我们可以简单粗暴地实现:

public String padLeftZeros(String inputString, int length) {
    if (inputString.length() >= length) {
        return inputString;
    }
    StringBuilder sb = new StringBuilder();
    while (sb.length() < length - inputString.length()) {
        sb.append('0');
    }
    sb.append(inputString);

    return sb.toString();
}

这段逻辑很清晰:

  • 如果原字符串长度已经大于等于目标长度,直接返回;
  • 否则,先往 StringBuilder 里追加足够的 '0',然后再追加原字符串。

如果想用别的字符填充,只需要改 append('0') 那一行就行。

如果要右填充,只需初始化 new StringBuilder(inputString),然后在后面追加字符即可。

2.2. 使用 substring

另一种左填充的方式是:先构造一个全由填充字符组成的字符串,再截取并拼接原字符串

StringBuilder sb = new StringBuilder();
for (int i = 0; i < length; i++) {
    sb.append(' ');
}

return sb.substring(inputString.length()) + inputString;

这段代码先构造一个长度为 length 的空格字符串,然后截掉前面的部分,只保留后面需要的空格,再拼上原字符串。

⚠️ 这种方式虽然可行,但效率一般,适合小数据量场景。

2.3. 使用 String.format

从 Java 5 开始,我们也可以用 String.format() 来做填充:

return String.format("%1$" + length + "s", inputString).replace(' ', '0');

📌 注意

  • 默认填充是空格;
  • 如果想用 '0' 或其他字符填充,需要用 replace() 替换。

右填充只需把格式符改成 %-

return String.format("%1$-" + length + "s", inputString);

3. 使用第三方库进行字符串填充

当然,也可以借助成熟库来完成这个操作,省事又可靠。

3.1. Apache Commons Lang

Apache Commons Lang 提供了非常实用的 StringUtils 工具类。

✅ 首先添加依赖:

<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-lang3</artifactId>
    <version>3.14.0</version>
</dependency>

然后就可以直接用了:

assertEquals("    123456", StringUtils.leftPad("123456", 10));
assertEquals("0000123456", StringUtils.leftPad("123456", 10, "0"));

📌 特点:

  • 默认填充字符是空格;
  • 可以指定填充字符;
  • 对应的右填充方法是 rightPad()

3.2. Google Guava

Guava 也提供了字符串填充支持。

✅ 添加依赖:

<dependency>
    <groupId>com.google.guava</groupId>
    <artifactId>guava</artifactId>
    <version>31.0.1-jre</version>
</dependency>

使用 Strings 类进行填充:

assertEquals("    123456", Strings.padStart("123456", 10, ' '));
assertEquals("0000123456", Strings.padStart("123456", 10, '0'));

📌 注意:

  • Guava 的方法必须显式传入填充字符;
  • 右填充方法是 padEnd()

4. 总结

本文介绍了几种在 Java 中实现字符串填充的方式:

✅ 自定义实现(StringBuildersubstringString.format
✅ 第三方库(Apache Commons Lang、Google Guava)

📌 小贴士:

  • 自己写适合轻量场景,控制力强;
  • 用库更稳定,适合工程化项目;
  • 左填充用 leftPad / padStart,右填充用 rightPad / padEnd

完整代码示例可参考 GitHub 项目地址


原始标题:Pad a String with Zeros or Spaces in Java