概述
所有的中文字符都为全角字符,占两个字节(16位)。而相应的全角英文字符则与中文字符等宽,相应地,半角英文字符则与半个中文字符宽度相同。这种特性也正是二者名称的体现,全角:Full-width;半角:Half-width。
半角字符与全角字符的规律:
- 半角字符的范围:33 (0x21) ~ 126 (0x7E)
- 全角字符的范围:65281 (0xFF01) ~ 65374 (0xFF5E)
- 全角字符与相应的半角字符恒差 65248 (0xFEE0),即全角字符对应的Code - 半角字母Code = 65248。如:
输出结果为:char c1 = '('; // 中文括号 ( char c2 = '('; // 英文括号 ( System.out.println((int)c1); System.out.println((int)c2); System.out.println((int)c1 - (int)c2);
65288 40 65248
但空格例外:半角空格=32(0x20);全角空格=12288(0x3000)
在Java中判断全/半角字符:
在Java中,str.length()
返回的是字符个数,而str.getBytes().length
则返回的是字节数。则如果一个字符串中全部都是全角字符,那么str.length() = 2 * str.getBytes().length
。反之如果一个字符串中全部都是半角字符,那么str.length() = str.getBytes().length
。若str.getBytes().length < str.length() < 2 * str.getBytes().length
,则字符串中既包含半角字符也包含全角字符(in most cases)。
public class JudgeWidth{
public String fullOrHalf(String str){
if( str.length() == 2 * str.getBytes().length ){
return "Full Width Characters Only"
}else if( str.length() = 2 * str.getBytes().length ){
return "Half Width Characters Only"
}else {
return "Half-Full Width Characters Mixture"
}
}
}