java全角和半角转换

package test;

public class HalfAndFullConverseUtil {

    /**
     * ASCII表中可见字符从!开始,偏移位值为33(Decimal)
     */
    private static final char DBC_CHAR_START = 33; // 半角!

    /**
     * ASCII表中可见字符到~结束,偏移位值为126(Decimal)
     */
    private static final char DBC_CHAR_END = 126; // 半角~

    /**
     * 全角对应于ASCII表的可见字符从!开始,偏移值为65281
     */
    private static final char SBC_CHAR_START = 65281; // 全角!

    /**
     * 全角对应于ASCII表的可见字符到~结束,偏移值为65374
     */
    private static final char SBC_CHAR_END = 65374; // 全角~

    /**
     * ASCII表中除空格外的可见字符与对应的全角字符的相对偏移
     */
    private static final int CONVERT_STEP = 65248; // 全角半角转换间隔

    /**
     * 全角空格的值,它没有遵从与ASCII的相对偏移,必须单独处理
     */
    private static final char SBC_SPACE = 12288; // 全角空格 12288

    /**
     * 半角空格的值,在ASCII中为32(Decimal)
     */
    private static final char DBC_SPACE = ‘ ‘; // 半角空格

    /**
     * <PRE>
     * 半角字符->全角字符转换
     * 只处理空格,!到˜之间的字符,忽略其他
     * </PRE>
     */
    public static String bj2qj(String src) {
        if (src == null) {
            return src;
        }
        StringBuilder buf = new StringBuilder(src.length()+1);
        char[] ca = src.toCharArray();
        for (int i = 0; i < ca.length; i++) {
            if (ca[i] == DBC_SPACE) { // 如果是半角空格,直接用全角空格替代
                buf.append(SBC_SPACE);
            } else if ((ca[i] >= DBC_CHAR_START) && (ca[i] <= DBC_CHAR_END)) { // 字符是!到~之间的可见字符
                buf.append((char) (ca[i] + CONVERT_STEP));
            } else { // 不对空格以及ascii表中其他可见字符之外的字符做任何处理
                buf.append(ca[i]);
            }
        }
        return buf.toString();
    }

    /**
     * <PRE>
     * 全角字符->半角字符转换
     * 只处理全角的空格,全角!到全角~之间的字符,忽略其他
     * </PRE>
     */
    public static String qj2bj(String src) {
        if (src == null) {
            return src;
        }
        StringBuilder buf = new StringBuilder(src.length()+1);
        char[] ca = src.toCharArray();
        for (int i = 0; i < src.length(); i++) {
            if (ca[i] >= SBC_CHAR_START && ca[i] <= SBC_CHAR_END) { // 如果位于全角!到全角~区间内
                buf.append((char) (ca[i] - CONVERT_STEP));
            } else if (ca[i] == SBC_SPACE) { // 如果是全角空格
                buf.append(DBC_SPACE);
            } else { // 不处理全角空格,全角!到全角~区间外的字符
                buf.append(ca[i]);
            }
        }
        return buf.toString();
    }

    public static void main(String[] args) throws Exception {
        String a = "HRG";
        String c = "HRC";

        String b = bj2qj(c);

        System.out.println(b);
    }

}

原文地址:https://www.cnblogs.com/jinzhiming/p/10762175.html

时间: 2024-08-02 23:02:27

java全角和半角转换的相关文章

java 全角、半角字符串转换

转自:http://www.cnblogs.com/modou/articles/2679815.html     加入了空字符串的验证 半角转全角的方法: /** * @Title: ToSBC * @Description: 半角转全角 * @param input String. * @return 全角字符串. * @throws */ public static String ToSBC(String input) { if(!("".equals(input)||input

java全角、半角字符的关系以及转换

如果搞明白了Java中全角字符和半角字符之间的关系,那他们之间的转换就不是个麻烦事儿.你只需要对这个关系有那么一个印象就足够了. 全角字符与半角字符的关系 通过下面的代码能看到Java中所有字符以及对应编码的值\ public static void main(String[] args) { for (int i = Character.MIN_VALUE; i <= Character.MAX_VALUE; ++i) { System.out.println(i + " "

C#全角和半角转换

在计算机屏幕上,一个汉字要占两个英文字符的位置,人们把一个英文字符所占的位置称为"半角",相对地把一个汉字所占的位置称为"全角".在汉字输入时,系统提供"半角"和"全角"两种不同的输入状态,但是对于英文字母.符号和数字这些通用字符就不同于汉字,在半角状态它们被作为英文字符处理:而在全角状态,它们又可作为中文字符处理.半角和全角切换方法:单击输入法工具条上的 按钮或按键盘上的Shift+Space键来切换. (1)全角--指一个

字符串 批量全角、半角转换

全角转为半角 ADDRESS=KTRANSLATE(ADDRESS,'1234567890()','1234567890()'); ADDRESS=KTRANSLATE(ADDRESS,'ABCDEFGHIJKLMNOPQRSTUVWXYZ','ABCDEFGHIJKLMNOPQRSTUVWXYZ'); 另一种方法:TRANWRD(ADDRESS,'?','?');

java 全角字符半角字符转换

[java] view plaincopy /// <summary> /// 判断字符是否英文半角字符或标点 /// </summary> /// <remarks> /// 32    空格 /// 33-47    标点 /// 48-57    0~9 /// 58-64    标点 /// 65-90    A~Z /// 91-96    标点 /// 97-122    a~z /// 123-126  标点 /// </remarks> pu

java全角转半角

// 转半角的函数(DBC case) // 任意字符串 // 半角字符串 // 全角空格为12288,半角空格为32 // 其他字符半角(33-126)与全角(65281-65374)的对应关系是:均相差65248 public String ToDBC(String input) { char[] c = input.toCharArray(); for (int i = 0; i < c.length; i++) { if (c[i] == 12288) { c[i] = (char) 3

详解全角和半角的转换

最近在项目中遇到一个问题,客户上传的文件无法下载下来,经过定位发现原来客户上传的文件名中包含很多全角字符导致无法解析,找不到对应的文件,其实文件是真实存在的,只是用的上传下载组件不支持全角字符的文件名,从而导致文件找到不到,无法下载. 所以本人就对全角和半角进行了一些分析和总结以及它们之间用java代码是如何进行转换的经验同各位园友进行分享,希望大家共同学习,共同进步,不足之处,请大家不吝指出. 好了,进入正题......... 全角和半角简介 全角是一种电脑字符,且每个全角字符占用两个标准字符

SQL转换全角和半角函数

SQL转换全角和半角函数 CREATE FUNCTION f_Convert( @str NVARCHAR(4000), --要转换的字符串 @flag bit --转换标志,0转换成半角,1转换成全角 )RETURNS nvarchar(4000) AS BEGIN DECLARE @pat nvarchar(8),@step int,@i int,@spc int IF @flag=0 SELECT @pat=N'%[!--]%',@step=-65248, @str=REPLACE(@st

python 实现 全角字符 传转换成 半角字符串

Python 2.7.6 (default, Nov 10 2013, 19:24:18) [MSC v.1500 32 bit (Intel)] on win32 Type "copyright", "credits" or "license()" for more information. >>> def strQ2B(ustring): #把全角字符串转半角 ustring=ustring.decode("cp9