Java字符串格式化:每隔四位添加空格
在实际开发中,我们经常会遇到需要对字符串进行格式化处理的场景,比如将长数字串、身份证号、银行卡号等信息每隔四位添加一个空格,提升内容的可读性。Java提供了多种实现方式,本文将介绍几种常用的实现方法,并给出对应的代码示例。
方法一:使用循环遍历字符拼接
这是最直观的实现思路,我们可以遍历原始字符串的每个字符,每拼接四个字符就额外添加一个空格,最后处理末尾可能多余的空格即可。需要注意的是,如果原始字符串长度正好是四的倍数,最后会多出一个空格,需要做截取处理。
public class StringFormatUtil {
/**
* 每隔四位添加空格(循环遍历方式)
* @param original 原始字符串
* @return 格式化后的字符串
*/
public static String addSpaceByLoop(String original) {
if (original == null || original.isEmpty()) {
return original;
}
StringBuilder result = new StringBuilder();
for (int i = 0; i < original.length(); i++) {
// 每四个字符添加一个空格,注意第一个字符前不需要加空格
if (i != 0 && i % 4 == 0) {
result.append(" ");
}
result.append(original.charAt(i));
}
return result.toString();
}
public static void main(String[] args) {
String testStr = "1234567890123456";
String formatted = addSpaceByLoop(testStr);
System.out.println("原始字符串:" + testStr);
System.out.println("格式化后:" + formatted);
}
}上述代码中,我们通过StringBuilder来拼接字符串提升性能,遍历原始字符串时,判断当前索引是否为4的倍数且不是第一个字符,如果是就先添加空格再拼接当前字符。运行后输出结果为:1234 5678 9012 3456。
方法二:使用正则表达式替换
正则表达式可以很方便地匹配固定长度的字符组,我们可以利用正向预查的语法,匹配每四个字符的前面位置,然后替换为空格。这种方式代码更简洁,不需要手动处理循环逻辑。
public class StringFormatUtil {
/**
* 每隔四位添加空格(正则替换方式)
* @param original 原始字符串
* @return 格式化后的字符串
*/
public static String addSpaceByRegex(String original) {
if (original == null || original.isEmpty()) {
return original;
}
// 正向预查,匹配每四个字符前的位置,替换为空格
return original.replaceAll("(.{4})(?=.)", "$1 ");
}
public static void main(String[] args) {
String testStr = "abcdefghijklmnop";
String formatted = addSpaceByRegex(testStr);
System.out.println("原始字符串:" + testStr);
System.out.println("格式化后:" + formatted);
}
}这里的正则表达式(.{4})(?=.)表示匹配任意四个字符,并且这四个字符后面还有至少一个字符(通过(?=.)正向预查实现),然后将匹配到的四个字符替换为$1 (即原四个字符加一个空格)。运行后输出结果为:abcd efgh ijkl mnop。
方法三:使用StringBuilder按长度截取拼接
我们还可以通过循环每次截取四个字符的子串,拼接到结果中并添加空格,直到原始字符串剩余长度不足四位,最后拼接剩余部分。这种方式避免了正则的性能开销,也比纯字符遍历更容易理解。
public class StringFormatUtil {
/**
* 每隔四位添加空格(截取拼接方式)
* @param original 原始字符串
* @return 格式化后的字符串
*/
public static String addSpaceBySubstring(String original) {
if (original == null || original.isEmpty()) {
return original;
}
StringBuilder result = new StringBuilder();
int length = original.length();
int index = 0;
while (index < length) {
// 截取剩余部分的前四个字符,如果不足四个就截取全部
int end = Math.min(index + 4, length);
result.append(original.substring(index, end));
// 如果不是最后一段,就添加空格
if (end < length) {
result.append(" ");
}
index = end;
}
return result.toString();
}
public static void main(String[] args) {
String testStr = "1234567890";
String formatted = addSpaceBySubstring(testStr);
System.out.println("原始字符串:" + testStr);
System.out.println("格式化后:" + formatted);
}
}该方式通过substring方法每次截取固定长度的子串,判断当前截取的结束位置是否小于原始字符串总长度,如果是说明后面还有字符,就添加空格。运行后输出结果为:1234 5678 90,可以正确处理长度不是四倍数的情况。
三种方法对比
| 实现方式 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
| 循环遍历字符拼接 | 逻辑直观,容易理解,无额外依赖 | 需要手动处理边界条件,代码稍长 | 初学者理解逻辑,简单场景使用 |
| 正则表达式替换 | 代码简洁,一行即可实现 | 正则表达式有一定学习成本,复杂场景下性能略低 | 熟悉正则,追求代码简洁的场景 |
| 截取拼接方式 | 逻辑清晰,无正则开销,性能好 | 需要理解截取逻辑 | 对性能有要求,字符串较长的场景 |
实际开发中可以根据具体需求选择合适的实现方式,如果字符串长度较短,三种方式的性能差异可以忽略,优先选择可读性高的方式即可。
Java字符串格式化每隔四位加空格StringBuilder正则表达式字符串处理修改时间:2026-05-24 12:20:03