Java全角与半角字符转换原理及实现

南乔
南乔
发布时间:2026-10-14 | 2人浏览过
原创

在数据处理中,全角与半角字符的混用常导致格式错误。了解其底层Unicode编码规律,可快速实现精准转换。

全角与半角字符的编码关系

全角字符和半角字符的区别在于占用空间大小,这直接反映在它们的Unicode编码值上。通过分析所有字符的编码映射,我们可以发现明确的数学规律:

  1. 常规字符:半角字符范围通常从 33 开始到 126 结束。对应的全角字符则从 65281 开始到 65374 结束。
  2. 空格字符:这是一个特例。半角空格的编码为 32,而全角空格的编码为 12288。
  3. 偏移量计算:对于非空格字符,全角编码减去半角编码的差值是固定的。例如:65281 - 33 = 65248。这意味着,只要知道一个半角字符的编码,加上 65248 即可得到对应的全角编码;反之,全角减 65248 即为半角。

Java语言实现字符转换

基于上述规律,我们可以通过Java代码轻松实现两种转换方向。核心逻辑是将字符串转为字符数组,逐个判断并应用偏移量修正。

第1步:将全角字符串转换为半角

目的:去除文本中的全角符号和空格,使其符合标准ASCII或UTF-8常用文本规范。
入口:包含全角字符的 String 对象。
动作:

/**
 * 全角字符串转换半角字符串
 *
 * @param fullWidthStr 非空的全角字符串
 * @return 半角字符串
 */
private static String fullWidth2halfWidth(String fullWidthStr) {
    if (fullWidthStr == null || fullWidthStr.length() <= 0) {
        return "";
    }
    char[] charArray = fullWidthStr.toCharArray();
    // 遍历字符数组进行转换
    for (int i = 0; i < charArray.length; ++i) {
        int charIntValue = (int) charArray[i];
        // 情况1:处理常规标点字母数字 (65281~65374)
        if (charIntValue >= 65281 && charIntValue <= 65374) {
            charArray[i] = (char) (charIntValue - 65248);
        } 
        // 情况2:处理全角空格 (12288 -> 32)
        else if (charIntValue == 12288) {
            charArray[i] = (char) 32;
        }
    }
    return new String(charArray);
}

完成状态:返回新字符串,其中所有全角字母、数字、标点变为半角,全角空格变为普通空格。

第2步:将半角字符串转换为全角

目的:将英文标点、字母等扩展为占两个字节的全角形式,常用于特定排版需求。
入口:包含半角字符的 String 对象。
动作:

/**
 * 半角字符串转换全角字符串
 *
 * @param halfWidthStr 半角字符串
 * @return 全角字符串
 */
private static String halfWidth2fullWidth(String halfWidthStr) {
    if (halfWidthStr == null || halfWidthStr.length() <= 0) {
        return "";
    }
    char[] charArray = halfWidthStr.toCharArray();
    for (int i = 0; i < charArray.length; ++i) {
        int charIntValue = (int) charArray[i];
        // 情况1:处理常规字符 (33~126),需加偏移量
        if (charIntValue >= 33 && charIntValue <= 126) {
            charArray[i] = (char) (charIntValue + 65248);
        } 
        // 情况2:处理半角空格 (32 -> 12288)
        else if (charIntValue == 32) {
            charArray[i] = (char) 12288;
        }
    }
    return new String(charArray);
}

完成状态:返回新字符串,原始半角内容已扩展为对应全角形式。

简要总结

掌握 65248 这一关键偏移量和 12288 这一全角空格编码,即可在Java中零依赖实现高效的全半角互转。建议在数据入库前或输出展示前调用这些方法,以确保格式一致性。以上就是Java全角半角字符转换原理及实现的详细内容,更多关于Java字符处理技巧的资料请关注本站其它相关文章!

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表