字符串半角全角互转详解

全角和半角之间的互相转换。

 ASCII的一些知识。

\n 回车换行  

\t 横向跳到下一制表位置  

\v 竖向跳格  

\b 退格  

\r 回车  

\f 走纸换页  

\\ 反斜线符"\"  

\' 单引号符  

\ddd 1~3位八进制数所代表的字符  

\xhh 1~2位十六进制数所代表的字符


空格的ASCII是32,转换为16进制是x20,使用转义字符为 \x20

ASCII码表

ASCII码表

下面贴代码,在参考别人的基础上另作整理。

package com.kongming.someuseful;

/**
 * @author ACER
 * 
 *         实现对字符串中全角字符和半角字符的互相转换
 */
public class QuanJiao_BanJiao_Transform {

	// ASCII表中可见字符从!开始,值为33(Decimal),半角对应字符为 !
	static final char DBC_CHAR_START = 33;

	// ASCII表中可见字符到~结束,值为126(Decimal),半角对应字符为 ~
	static final char DBC_CHAR_END = 126;

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

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

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

	// 全角空格的值,没有遵循上面说的ASCII的相对偏移量,必须单独处理,全角空格 ASCII值为12288
	static final char SBC_SPACE = 12288;

	// 半角空格的值,ASCII值为32(Decimal),半角空格 ' '
	static final char DBC_SPACE = 32;

	/**
	 * --半角字符转为全角字符
	 * 
	 * @param src
	 *            包含半角字符的字符串
	 * @return 返回全角字符的字符串
	 */
	public static String bj2qj(String src) {
		if (src == null) {
			return src;
		}
		StringBuilder buf = new StringBuilder(src.length());
		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));
				// 不对空格以及ascii表中其他可见字符之外的字符做任何处理
			} else {
				buf.append(ca[i]);
			}
		}
		return buf.toString();
	}

	/**
	 * --全角字符转为半角字符
	 * 
	 * @param src
	 *            包含全角字符的字符串
	 * @return 返回半角字符的字符串
	 */
	public static String qj2bj(String src) {
		if (src == null) {
			return src;
		}
		StringBuilder buf = new StringBuilder(src.length());
		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) {
		String qj = "kmsocial,周杰。. -。-";
		String bj = "kmsocial,周杰. -.-";

		String qj2bj = QuanJiao_BanJiao_Transform.qj2bj(qj);
		String bj2qj = QuanJiao_BanJiao_Transform.bj2qj(bj);

		System.out.println("转换前:" + qj + "\n转换后:" + qj2bj);
		System.out.println("转换前:" + bj + "\n转换后:" + bj2qj);
	}
}


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值