汉字全半角转化程序

转载一个牛人的。方便以后查看使用:

也许. 这个代码对很多人来说, 不知道有什么用途. 或者说, 他们用不上. 本来也是随意贴贴的.

我们做的系统, 很多是电脑基础很差的顾客, 跟他说不清楚全角/半角的差别, 对于一些要求数字输入, 或者半角限制的输入, 这时候很多客户会说, 我明明输入是数字, 为什么系统说这不是数字呢. 所以, 我们在输入合法检查之前, 把用户的输入进行善意的撰改. 以达到合法输入的目的. 这在用户体验上有很好的效果.  希望大家都能做更好的用户体验:)

 

 

Java代码 复制代码
  1. /**  
  2.  * <PRE>  
  3.  * 提供对字符串的全角-&gt;半角,半角-&gt;全角转换    
  4.  * </PRE>  
  5.  */  
  6. public class BCConvert {   
  7.   
  8.     /**  
  9.      * ASCII表中可见字符从!开始,偏移位值为33(Decimal)  
  10.      */  
  11.     static final char DBC_CHAR_START = 33;   // 半角!   
  12.   
  13.     /**  
  14.      * ASCII表中可见字符到~结束,偏移位值为126(Decimal)  
  15.      */  
  16.     static final char DBC_CHAR_END   = 126;  // 半角~   
  17.   
  18.     /**  
  19.      * 全角对应于ASCII表的可见字符从!开始,偏移值为65281  
  20.      */  
  21.     static final char SBC_CHAR_START = 65281// 全角!   
  22.   
  23.     /**  
  24.      * 全角对应于ASCII表的可见字符到~结束,偏移值为65374  
  25.      */  
  26.     static final char SBC_CHAR_END   = 65374// 全角~   
  27.   
  28.     /**  
  29.      * ASCII表中除空格外的可见字符与对应的全角字符的相对偏移  
  30.      */  
  31.     static final int  CONVERT_STEP   = 65248// 全角半角转换间隔   
  32.   
  33.     /**  
  34.      * 全角空格的值,它没有遵从与ASCII的相对偏移,必须单独处理  
  35.      */  
  36.     static final char SBC_SPACE      = 12288// 全角空格 12288   
  37.   
  38.     /**  
  39.      * 半角空格的值,在ASCII中为32(Decimal)  
  40.      */  
  41.     static final char DBC_SPACE      = ' ';  // 半角空格   
  42.   
  43.     /**  
  44.      * <PRE>  
  45.      * 半角字符-&gt;全角字符转换  
  46.      * 只处理空格,!到&tilde;之间的字符,忽略其他  
  47.      * </PRE>  
  48.      */  
  49.     public static String DBC2SBC(String src) {   
  50.         if (src == null) {   
  51.             return src;   
  52.         }   
  53.         StringBuilder buf = new StringBuilder(src.length());   
  54.         char[] ca = src.toCharArray();   
  55.         for (int i = 0; i < ca.length; i++) {   
  56.             if (ca[i] == DBC_SPACE) { // 如果是半角空格,直接用全角空格替代   
  57.                 buf.append(SBC_SPACE);   
  58.             } else if ((ca[i] >= DBC_CHAR_START) && (ca[i] <= DBC_CHAR_END)) { // 字符是!到~之间的可见字符   
  59.                 buf.append((char) (ca[i] + CONVERT_STEP));   
  60.             } else { // 不对空格以及ascii表中其他可见字符之外的字符做任何处理   
  61.                 buf.append(ca[i]);   
  62.             }   
  63.         }   
  64.         return buf.toString();   
  65.     }   
  66.   
  67.     /**  
  68.      * <PRE>  
  69.      * 全角字符-&gt;半角字符转换  
  70.      * 只处理全角的空格,全角!到全角~之间的字符,忽略其他  
  71.      * </PRE>  
  72.      */  
  73.     public static String SBC2DBC(String src) {   
  74.         if (src == null) {   
  75.             return src;   
  76.         }   
  77.         StringBuilder buf = new StringBuilder(src.length());   
  78.         char[] ca = src.toCharArray();   
  79.         for (int i = 0; i < src.length(); i++) {   
  80.             if (ca[i] >= SBC_CHAR_START && ca[i] <= SBC_CHAR_END) { // 如果位于全角!到全角~区间内   
  81.                 buf.append((char) (ca[i] - CONVERT_STEP));   
  82.             } else if (ca[i] == SBC_SPACE) { // 如果是全角空格   
  83.                 buf.append(DBC_SPACE);   
  84.             } else { // 不处理全角空格,全角!到全角~区间外的字符   
  85.                 buf.append(ca[i]);   
  86.             }   
  87.         }   
  88.         return buf.toString();   
  89.     }   
  90.   
  91. }  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值