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 中实现字符串填充的方式:
✅ 自定义实现(StringBuilder
、substring
、String.format
)
✅ 第三方库(Apache Commons Lang、Google Guava)
📌 小贴士:
- 自己写适合轻量场景,控制力强;
- 用库更稳定,适合工程化项目;
- 左填充用
leftPad
/padStart
,右填充用rightPad
/padEnd
。
完整代码示例可参考 GitHub 项目地址。