全角:是指中GB2312-80(《信息交换用汉字编码字符集·基本集》)中的各种符号。
半角:是指英文件ASCII码中的各种符号。
全角状态下字母、数字符号等都会占两个字节的位置,也就是一个汉字那么宽,半角状态下,字母数字符号一般会占一个字节,也就是半个汉字的位置,全角半角对汉字没有影响。
现在我们来看一下在java编程语言中如何来判断字符串中的全角半角符号?
有两种方式可以判断:
1: 通过正则表达式来进行判断 [^\\x00-\\xff]
2: 通过字符编码的范围进行判断.
有关字符编码的范围介绍如下:(ps:我们可以编写一个测试用例输出所有的字符编码来确定范围)
public static void main(String[] args) {for (int i = Character.MIN_VALUE; i <= Character.MAX_VALUE; ++i) {System.out.println(i + " " + (char)i);}}
经过测试发现:
1.半角字符是从33开始到126结束
2.与半角字符对应的全角字符是从65281开始到65374结束
3.其中半角的空格是32.对应的全角空格是12288
半角和全角的关系很明显,除空格外的字符偏移量是65248(65281-33 = 65248)
使用正则表达式进行判断
public static void main(String[] args) {// 纯半角,包含有数字,字母,特殊符号,空格,汉字String test = "0123456789abcde!@#$%^& 你好";char[] chars_test = test.toCharArray();for (int i = 0; i < chars_test.length; i++) {String temp = String.valueOf(chars_test[i]);// 判断是全角字符if (temp.matches("[^\\x00-\\xff]")) {System.out.println("全角 " + temp);}// 判断是半角字符else {System.out.println("半角 " + temp);}}}
这里介绍下如果不想要字符串中的汉字的话,可以使用正则表达式将之去除: [\u4e00-\u9fa5]
@Testpublic void testChinese() {String ss = "qwen你ra是sd谁f";System.out.println(ss.replaceAll("[\u4e00-\u9fa5]", ""));}
或者是截取出字符串中的汉字
@Testpublic void testGetChinese() {String s = "qwen你ra是sd谁f";char[] chars_ss = s.toCharArray();String test = "";for (int i = 0; i < chars_ss.length; i++) {String temp = String.valueOf(chars_ss[i]);// 判断是汉字if (temp.matches("[\u4e00-\u9fa5]")) {test += temp;}}System.out.println(test);}
使用字符的unicode码进行判断
@Testpublic void testUnicode(){// 纯半角,包含有数字,字母,特殊符号,空格,汉字String test = "0123456789abcde!@#$%^& 你好";// 首先将汉字用空格替换掉test = test.replaceAll("[\u4e00-\u9fa5]", "");char[] chars_test = test.toCharArray();for (int i = 0; i < chars_test.length; i++) {int charValue = (int) chars_test[i];// 判断是全角字符if (charValue >= 65281 && charValue <= 65374 || charValue == 12288) {System.out.println("全角 " + (char) charValue);}// 判断是半角字符else if (charValue >= 33 && charValue <= 126 || charValue == 32) {System.out.println("半角 " + (char) charValue);}}}