首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 程式設計入門

Java 全角半角字符轉換實現方案

     編輯:Java 程式設計入門

前言

在中文處理中,全角(全形)與半角(半形)字符轉換是常見需求。全角字符佔兩個字節位置,半角佔一個。ASCII 可見字符範圍 ! (33) 到 ~ (126),對應全角 ! (65281) 到 ~ (65374),差值為 65248。空格特殊:半角 32,全角 12288,不遵循該偏移。本文提供完整工具類實現雙向轉換。

核心邏輯

  • 半角轉全角:空格→全角空格;!~ 範圍內字符 +65248;其餘不變。
  • 全角轉半角:全角空格→半角空格;!~ 範圍內字符 -65248;其餘不變。

完整工具類代碼

package com.whatycms.common.util;

import org.apache.commons.lang.StringUtils;

public class BCConvert {
    // 半角範圍
    static final char DBC_CHAR_START = 33;   // '!'
    static final char DBC_CHAR_END = 126;    // '~'
    // 全角範圍
    static final char SBC_CHAR_START = 65281; // '!'
    static final char SBC_CHAR_END = 65374;   // '~'
    // 偏移量
    static final int CONVERT_STEP = 65248;
    // 空格
    static final char SBC_SPACE = 12288; // 全角空格
    static final char DBC_SPACE = ' ';   // 半角空格

    /**
     * 半角轉全角
     */
    public static String bj2qj(String src) {
        if (src == null) return src;
        StringBuilder buf = new StringBuilder(src.length());
        char[] ca = src.toCharArray();
        for (char c : ca) {
            if (c == DBC_SPACE) {
                buf.append(SBC_SPACE);
            } else if (c >= DBC_CHAR_START && c <= DBC_CHAR_END) {
                buf.append((char) (c + CONVERT_STEP));
            } else {
                buf.append(c);
            }
        }
        return buf.toString();
    }

    /**
     * 全角轉半角
     */
    public static String qj2bj(String src) {
        if (src == null) return src;
        StringBuilder buf = new StringBuilder(src.length());
        char[] ca = src.toCharArray();
        for (char c : ca) {
            if (c >= SBC_CHAR_START && c <= SBC_CHAR_END) {
                buf.append((char) (c - CONVERT_STEP));
            } else if (c == SBC_SPACE) {
                buf.append(DBC_SPACE);
            } else {
                buf.append(c);
            }
        }
        return buf.toString();
    }

    public static void main(String[] args) {
        System.out.println(StringUtils.trimToEmpty(" a,b ,c "));
        String s = "nihaohk | nihehe ,。 78 7 ";
        s = BCConvert.qj2bj(s);
        System.out.println(s); // nihaohk | nihehe ,。 78 7
        System.out.println(BCConvert.bj2qj(s)); // nihaohk | nihehe ,。 78 7
    }
}

關鍵點說明

  1. 字符編碼基礎:全半角映射基於 Unicode 碼點偏移,非線性映射(如空格)需單獨處理。
  2. 性能考慮:使用 StringBuilder 和字符數組遍歷,避免字符串拼接開銷。
  3. 邊界處理:嚴格判斷範圍,超出範圍字符(如中文漢字、標點)保持原樣。
  4. 工具庫依賴:示例中用 StringUtils.trimToEmpty,實際項目可按需引入或替換為 JDK 原生 trim()。

應用場景

  • 用戶輸入正規化:表單提交前統一轉半角存儲。
  • 搜索匹配:查詢時將全半角統一,提高召回率。
  • 數據清洗:導入異構數據源時統一字符寬度。

總結

全半角轉換本質是 Unicode 碼點的固定偏移映射,掌握核心偏移量(65248)與特殊空格處理,即可輕鬆實現高效、準確的轉換工具。上述代碼已封裝為靜態方法,可直接集成到項目中使用。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved