489
技术社区[云栖]
java全角字符转换为半角 半角转全角
/// <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> public static bool IsBjChar(char c) { int i = (int)c; return i >= 32 && i <= 126; } /// <summary> /// 判断字符是否全角字符或标点 /// </summary> /// <remarks> /// <para>全角字符 - 65248 = 半角字符</para> /// <para>全角空格例外</para> /// </remarks> public static bool IsQjChar(char c) { if (c == '\u3000') return true; int i = (int)c - 65248; if (i < 32) return false; return IsBjChar((char)i); } /// <summary> /// 将字符串中的全角字符转换为半角 /// </summary> public static string ToBj(string s) { if (s == null || s.Trim() == string.Empty) return s; StringBuilder sb = new StringBuilder(s.Length); for (int i = 0; i < s.Length; i++) { if (s[i] == '\u3000') sb.Append('\u0020'); else if (IsQjChar(s[i])) sb.Append((char)((int)s[i] - 65248)); else sb.Append(s[i]); } return sb.ToString(); }
全角空格为12288,半角空格为32
其他字符半角(33-126)与考试.大提示全角(65281-65374)的对应关系是:均相差65248
/*************************************** * * 全角转换成半角 * @param input 原始字符串 * @return 转换后的字符串 * ***************************************/ public static String QtoB(String input) { char c[] = input.toCharArray(); for (int i = 0; i < c.length; i++) { if (c[i] == '\u3000') { c[i] = ' '; }? else if (c[i] > '\uFF00' && c[i] < '\uFF5F') { c[i] = (char) (c[i] - 65248); } } return new String(c); }
//半角转全角 public static String BtoQ(String input){ char c[] = input.toCharArray(); for ( int i=0; i<c.length;i++ ) { if (c[i] ==' ') { c[i] = '\u3000'; } else if (c[i]<'\177') { c[i]= (char) (c[i]+65248); } } return new String(c); }
最后更新:2017-04-02 17:09:28