0

0

java格式化字符串位数_固定长度、截断与填充方法汇总

星降

星降

发布时间:2026-02-06 12:17:35

|

836人浏览过

|

来源于php中文网

原创

String.format()不截断超长字符串,仅通过%.Ns实现截断+填充;%-w.Ns可左对齐、截取前N字符并补空格至宽度w;需手动处理null及Unicode边界问题。

java格式化字符串位数_固定长度、截断与填充方法汇总

Java中用String.format()控制字符串长度:截断还是填充?

String.format()本身不直接支持截断,但能通过格式化语法实现左/右填充和固定宽度。关键在%s前加宽度修饰符:%5s表示至少占5字符,右对齐、左侧补空格;%-5s左对齐、右侧补空格。若原字符串超长(如"hello world"塞进%5s),它会原样输出,**不会截断**——这是最容易踩的坑。

常见误用场景:想把用户昵称统一显示为6位,用String.format("%6s", nick)结果发现超长昵称依然显示10个字。此时必须手动截断:

String.format("%6s", nick.substring(0, Math.min(nick.length(), 6)))

java.text.MessageFormat做带截断的模板化填充

MessageFormatString.format()更灵活,支持自定义格式子句,但默认也不含截断逻辑。需配合substring()或正则预处理。例如要保证每个字段最多4字符、不足则右补'0'

String padded = String.format("%-4.4s", nick); // %-4.4s:最小宽4,最大截取4 → 实现“截断+左对齐”

这里.4是精度(precision)修饰符,对字符串即最大长度,配合-可同时控制对齐与截断。注意:%.4s不指定最小宽度时,只截不断,也不填充。

立即学习Java免费学习笔记(深入)”;

  • %10.5s:至少10宽,最多取前5字符 → 实际效果是左补空格到10位,内容只显示5字符(相当于先截后填)
  • %-10.5s:左对齐,先截5字符,再右补空格到总长10
  • 精度值大于字符串长度时,无截断效果,仅按原长参与对齐

Apache Commons Lang的StringUtils:一行解决截断+填充

如果项目已引入commons-lang3StringUtils提供开箱即用的方法:leftPad()rightPad()只负责填充;abbreviate()负责截断;三者组合才能闭环。最简方案是StringUtils.leftPad(StringUtils.abbreviate(str, maxWidth), maxWidth, padChar),但要注意abbreviate()会在末尾加"...",不适合纯截断场景。

Pebblely
Pebblely

AI产品图精美背景添加

下载

推荐直接用StringUtils.substring(str, 0, maxWidth) + StringUtils.rightPad()

String result = StringUtils.rightPad(StringUtils.substring(nick, 0, 6), 6, "0");

这比手写Math.min()更安全(substring对负索引或越界自动处理),且rightPad明确区分填充字符与长度,不易混淆空格/零宽问题。

自定义工具方法:兼顾null安全、Unicode与性能

标准库和Commons都对null敏感(String.format()NullPointerExceptionStringUtils返回null或空串)。生产环境建议封装一层:

public static String truncateAndPad(String s, int width, char pad) {
    if (s == null) s = "";
    String truncated = s.substring(0, Math.min(s.length(), width));
    return String.format("%" + width + "s", truncated).replace(' ', pad);
}

注意两点:一是String.format()中动态拼接格式串虽可行,但width为负会出错,需校验;二是用replace(' ', pad)替换空格填充,对中文等宽字符有效,但对emoji或组合字符(如带变音符号的字母)可能因JVM版本差异导致视觉宽度不准——这种边界情况只能靠java.awt.font.FontMetrics或第三方库(如ICU4J)精确测量像素宽度,不在字符串层面解决。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
string转int
string转int

在编程中,我们经常会遇到需要将字符串(str)转换为整数(int)的情况。这可能是因为我们需要对字符串进行数值计算,或者需要将用户输入的字符串转换为整数进行处理。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

585

2023.08.02

c语言中null和NULL的区别
c语言中null和NULL的区别

c语言中null和NULL的区别是:null是C语言中的一个宏定义,通常用来表示一个空指针,可以用于初始化指针变量,或者在条件语句中判断指针是否为空;NULL是C语言中的一个预定义常量,通常用来表示一个空值,用于表示一个空的指针、空的指针数组或者空的结构体指针。

240

2023.09.22

java中null的用法
java中null的用法

在Java中,null表示一个引用类型的变量不指向任何对象。可以将null赋值给任何引用类型的变量,包括类、接口、数组、字符串等。想了解更多null的相关内容,可以阅读本专题下面的文章。

580

2024.03.01

format在python中的用法
format在python中的用法

Python中的format是一种字符串格式化方法,用于将变量或值插入到字符串中的占位符位置。通过format方法,我们可以动态地构建字符串,使其包含不同值。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

864

2023.07.31

python中的format是什么意思
python中的format是什么意思

python中的format是一种字符串格式化方法,用于将变量或值插入到字符串中的占位符位置。通过format方法,我们可以动态地构建字符串,使其包含不同值。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

439

2024.06.27

js 字符串转数组
js 字符串转数组

js字符串转数组的方法:1、使用“split()”方法;2、使用“Array.from()”方法;3、使用for循环遍历;4、使用“Array.split()”方法。本专题为大家提供js字符串转数组的相关的文章、下载、课程内容,供大家免费下载体验。

402

2023.08.03

js截取字符串的方法
js截取字符串的方法

js截取字符串的方法有substring()方法、substr()方法、slice()方法、split()方法和slice()方法。本专题为大家提供字符串相关的文章、下载、课程内容,供大家免费下载体验。

213

2023.09.04

java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

1510

2023.10.24

1688阿里巴巴货源平台入口与批发采购指南
1688阿里巴巴货源平台入口与批发采购指南

本专题整理了1688阿里巴巴批发进货平台的最新入口地址与在线采购指南,帮助用户快速找到官方网站入口,了解如何进行批发采购、货源选择以及厂家直销等功能,提升采购效率与平台使用体验。

26

2026.02.06

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Kotlin 教程
Kotlin 教程

共23课时 | 3.3万人学习

C# 教程
C# 教程

共94课时 | 8.7万人学习

Java 教程
Java 教程

共578课时 | 58.5万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号