JAVA实现全角半角相互转化 (full2Half & half2Full)

本文介绍了全角和半角字符的区别,并提供了JAVA代码实现全角到半角以及半角到全角的转化,主要涉及到的Unicode编码范围是65281~65374(全角)和33~126(半角)。特别提到空格的全角和半角编码分别为12288和32。

说明:

1.全角:指一个字符占用两个标准字符位置。汉字字符和规定了全角的英文字符及国标GB2312-80中的图形符号和特殊字符都是全角字符。一般的系统命令是不用全角字符的,只是在作文字处理时才会使用全角字符。

2.半角:指一字符占用一个标准的字符位置。通常的英文字母、数字键、符号键都是半角的,半角的显示内码都是一个字节。在系统内部,以上三种字符是作为基本代码处理的,所以用户输入命令和参数时一般都使用半角。

 

范围(无空格):

全角字符unicode编码从65281~65374(十六进制0xFF01 ~ 0xFF5E
半角字符unicode编码从33~126(十六进制0x21~ 0x7E

特例
空格比较特殊,全角为122880x3000),半角为 320x20

1. 中文文字永远是全角,只有英文字母、数字键、符号才有全角半角的概念,一个字母或数字占一个汉字的位置叫全角,占半个汉字的位置叫半角。

2. 引号在中英文、全半角情况下是不同的。


JAVA代码参考

全角转半角

     /**
     * 
     * @Title: convertStringFromFullWidthToHalfWidth.
     * @Description: Convert a String from half width to full width.
     * 
     * @param string input string
     * @return the converted String
     */
    public static String full2Half(String string) {
        if (isEmpty(string)) {
            return string;
        }
        
        char[] charArray = string.toCharArray();
        for (int i = 0; i < charArray.length; i++) {
            if (charArray[i] == 12288) {
                charArray[i] =' ';
            } else if (charArray[i] >= ' ' &&
                    charArray[i]  <= 65374) {
                charArray[i] = (char) (charArray[i] - 65248);
            } else {
                
            }
        }


        return new String(charArray);
    }


半角转全角:

/**
     * this is used to convert half to full-widths charaters.
    * @Title: half2Full
    * @param value input value
    * @return converted value
     */
    public static String half2Full(String value) {
        if (isEmpty(value)) {
            return "";
        }
        char[] cha = value.toCharArray();

        /**
         * full blank space is 12288, half blank space is 32
         * others :full is 65281-65374,and half is 33-126.
         */
        for (int i = 0; i < cha.length; i++) {
            if (cha[i] == 32) {
                cha[i] = (char) 12288;
            } else if (cha[i] < 127) {
                cha[i] = (char) (cha[i] + 65248);
            }
        }
        return new String(cha);
    }

    /**
     * @Description: check whether is empty.
     * @Title: isEmpty
     * @param str input string
     * @return whether the input is empty
     */
    public static boolean isEmpty(String str) {
        return str == null || str.length() == 0;
    }


    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值