Java如何判断字符串中包含有全角,半角符号,以及去除中文

全角:是指中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);
            }
        }
    }

 

你可能感兴趣的:(Utils)