当前位置:首页 > 后端开发 > 正文

Java怎样缩短字符串长度

在Java中获取字符串长度使用 length()方法,返回字符串的字符数量(包括空格和特殊字符), "abc".length()返回3,注意该方法统计的是UTF-16编码的代码单元数量,对于包含Unicode扩展字符(如emoji)的字符串,实际字符数可能小于返回值,此时需用 codePointCount()精确计算。

使用 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 和字符边界检查。
代码示例

Java怎样缩短字符串长度  第1张

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 提供更健壮的截断方法。
步骤

  1. 添加依赖(Maven):

    <dependency>
      <groupId>org.apache.commons</groupId>
      <artifactId>commons-lang3</artifactId>
      <version>3.12.0</version>
    </dependency>
  2. 代码示例:

    import org.apache.commons.lang3.StringUtils;
    String result = StringUtils.truncate("Hello, World!", 5); // 返回 "Hello"

    优势:自动处理 null、支持偏移量,适合复杂场景。


关键注意事项

  1. 边界检查:始终验证 maxLength 是否为正数,避免负数导致异常。
  2. 多语言支持:处理国际化文本时,优先考虑字符边界(如 BreakIterator)。
  3. 性能:对超长字符串,避免重复创建子串,用 StringBuilder 优化。
  4. 空值安全:方法入口处检查 null,增强代码健壮性。

最佳实践总结

场景 推荐方法 示例输出(maxLength=5)
基础英文截短 substring() “Hello” → “Hello”
含中文/Emoji 字符边界检查(safeTruncate “你好” → “你好”
需省略号提示 拼接 “LongText” → “Long…”
企业级项目 Apache Commons StringUtils 内置安全处理

引用说明

  • Oracle官方文档:Java String类
  • Apache Commons Lang:StringUtils文档
  • Unicode处理规范:Unicode标准

通过以上方法,您可安全高效地实现Java字符串截短,确保代码符合国际化和生产环境要求。

0