Java怎样缩短字符串长度
- 后端开发
- 2025-06-18
- 5
使用 substring() 方法(基础版)
原理:截取字符串从索引0开始到指定长度的子串。
代码示例:
public static String truncate(String input, int maxLength) { if (input == null || input.length() <= maxLength) { return input; } return input.substring(0, maxLength); }
调用示例:
String result = truncate("Hello, World!", 5); // 返回 "Hello"
注意事项:
- 若字符串长度小于 maxLength,直接返回原字符串。
- 需检查 null 值避免 NullPointerException。
处理多字节字符(如中文)
问题:直接使用 substring() 可能截断多字节字符(如中文、Emoji),导致乱码。
解决方案:结合 StringBuilder 和字符边界检查。
代码示例:
public static String safeTruncate(String input, int maxLength) { if (input == null || input.length() <= maxLength) { return input; } StringBuilder sb = new StringBuilder(maxLength); int totalChars = 0; for (char c : input.toCharArray()) { totalChars += (c < 256) ? 1 : 2; // 简单区分单/双字节字符 if (totalChars > maxLength) break; sb.append(c); } return sb.toString(); }
调用示例:
String result = safeTruncate("你好Java", 5); // 返回 "你好J"(避免乱码)
添加省略号(…)
场景:截短后显示省略号提升可读性。
代码示例:

public static String truncateWithEllipsis(String input, int maxLength) { if (input == null || input.length() <= maxLength) { return input; } return input.substring(0, maxLength - 3) + "..."; // 保留3位给省略号 }
调用示例:
String result = truncateWithEllipsis("This is a long text", 10); // 返回 "This is..."
使用第三方库(Apache Commons Lang)
推荐:StringUtils 提供更健壮的截断方法。
步骤:

-
添加依赖(Maven):
-
代码示例:
import org.apache.commons.lang3.StringUtils; String result = StringUtils.truncate("Hello, World!", 5); // 返回 "Hello"优势:自动处理 null、支持偏移量,适合复杂场景。
- 边界检查:始终验证 maxLength 是否为正数,避免负数导致异常。
- 多语言支持:处理国际化文本时,优先考虑字符边界(如 BreakIterator)。
- 性能:对超长字符串,避免重复创建子串,用 StringBuilder 优化。
- 空值安全:方法入口处检查 null,增强代码健壮性。
- Oracle官方文档:Java String类
- Apache Commons Lang:StringUtils文档
- Unicode处理规范:Unicode标准
关键注意事项
最佳实践总结
| 场景 | 推荐方法 | 示例输出(maxLength=5) |
|---|---|---|
| 基础英文截短 | substring() | “Hello” → “Hello” |
| 含中文/Emoji | 字符边界检查(safeTruncate) | “你好” → “你好” |
| 需省略号提示 | 拼接 | “LongText” → “Long…” |
| 企业级项目 | Apache Commons StringUtils | 内置安全处理 |
引用说明:
通过以上方法,您可安全高效地实现Java字符串截短,确保代码符合国际化和生产环境要求。
