Java全角与半角字符转换原理及实现
在数据处理中,全角与半角字符的混用常导致格式错误。了解其底层Unicode编码规律,可快速实现精准转换。
全角与半角字符的编码关系
全角字符和半角字符的区别在于占用空间大小,这直接反映在它们的Unicode编码值上。通过分析所有字符的编码映射,我们可以发现明确的数学规律:
- 常规字符:半角字符范围通常从
33开始到126结束。对应的全角字符则从65281开始到65374结束。 - 空格字符:这是一个特例。半角空格的编码为
32,而全角空格的编码为12288。 - 偏移量计算:对于非空格字符,全角编码减去半角编码的差值是固定的。例如:
65281 - 33 = 65248。这意味着,只要知道一个半角字符的编码,加上65248即可得到对应的全角编码;反之,全角减65248即为半角。
Java语言实现字符转换
基于上述规律,我们可以通过Java代码轻松实现两种转换方向。核心逻辑是将字符串转为字符数组,逐个判断并应用偏移量修正。
第1步:将全角字符串转换为半角
目的:去除文本中的全角符号和空格,使其符合标准ASCII或UTF-8常用文本规范。
入口:包含全角字符的 String 对象。
动作:
/**
* 全角字符串转换半角字符串
*
* @param fullWidthStr 非空的全角字符串
* @return 半角字符串
*/
private static String fullWidth2halfWidth(String fullWidthStr) {
if (fullWidthStr == null || fullWidthStr.length() <= 0) {
return "";
}
char[] charArray = fullWidthStr.toCharArray();
// 遍历字符数组进行转换
for (int i = 0; i < charArray.length; ++i) {
int charIntValue = (int) charArray[i];
// 情况1:处理常规标点字母数字 (65281~65374)
if (charIntValue >= 65281 && charIntValue <= 65374) {
charArray[i] = (char) (charIntValue - 65248);
}
// 情况2:处理全角空格 (12288 -> 32)
else if (charIntValue == 12288) {
charArray[i] = (char) 32;
}
}
return new String(charArray);
}
完成状态:返回新字符串,其中所有全角字母、数字、标点变为半角,全角空格变为普通空格。
第2步:将半角字符串转换为全角
目的:将英文标点、字母等扩展为占两个字节的全角形式,常用于特定排版需求。
入口:包含半角字符的 String 对象。
动作:
/**
* 半角字符串转换全角字符串
*
* @param halfWidthStr 半角字符串
* @return 全角字符串
*/
private static String halfWidth2fullWidth(String halfWidthStr) {
if (halfWidthStr == null || halfWidthStr.length() <= 0) {
return "";
}
char[] charArray = halfWidthStr.toCharArray();
for (int i = 0; i < charArray.length; ++i) {
int charIntValue = (int) charArray[i];
// 情况1:处理常规字符 (33~126),需加偏移量
if (charIntValue >= 33 && charIntValue <= 126) {
charArray[i] = (char) (charIntValue + 65248);
}
// 情况2:处理半角空格 (32 -> 12288)
else if (charIntValue == 32) {
charArray[i] = (char) 12288;
}
}
return new String(charArray);
}
完成状态:返回新字符串,原始半角内容已扩展为对应全角形式。
简要总结
掌握 65248 这一关键偏移量和 12288 这一全角空格编码,即可在Java中零依赖实现高效的全半角互转。建议在数据入库前或输出展示前调用这些方法,以确保格式一致性。以上就是Java全角半角字符转换原理及实现的详细内容,更多关于Java字符处理技巧的资料请关注本站其它相关文章!
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













