全角:是指中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]
@Test
public void testChinese() {
String ss = "qwen你ra是sd谁f";
System.out.println(ss.replaceAll("[\u4e00-\u9fa5]", ""));
}
或者是截取出字符串中的汉字
@Test
public 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码进行判断
@Test
public 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);
}
}
}

758

被折叠的 条评论
为什么被折叠?



