欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Java通过Unicode编码过滤特殊字符

程序员文章站 2022-03-22 18:08:32
首先,U+10000及以上的字符被称为增补字符。在Java中,增补字符使用两个char变量来表示,所以过滤特殊字符的时候,可以首先过滤掉这些增补字符,过程非常简单: /** * 判断字符串里是否包含增补字符 * @param str * @return true 包含增补字符 false 不包含增补字符 */ public static boolean supplementChar(String str) { int len = str...

首先,U+10000及以上的字符被称为增补字符。在Java中,增补字符使用两个char变量来表示,所以过滤特殊字符的时候,可以首先过滤掉这些增补字符,过程非常简单:

    /**
     * 判断字符串里是否包含增补字符
     * @param str
     * @return true 包含增补字符 false 不包含增补字符
     */
    public static boolean supplementChar(String str) {
        int len = str.length();
        return len != str.codePointCount(0,len);
    }

String类里有一个计算字符串代码点数量的方法,如果一个字符串里包含增补字符,那么该字符串的长度(char数量)不等于该字符串代码点的数量(因为增补字符由两个char组成)。

过滤掉增补字符后,可以通过限制Unicode编码的区间,来过滤掉区间外的字符。具体Unicode各个区间的含义可以参考这里

    /**
     * 选定的Unicode区间
     */
	public static String range = "0000-007F;2E80-2EFF;3000-303F;3400-4DBF;4E00-9FBF;F900-FAFF";
    /**
     * 判断字符串的字符是否在指定Unicode区间
     * @param str
     * @return true 在指定区间 false 不在指定区间
     */
    public static boolean unicodeRange(String str) {
        String[] ranges = range.split(";");
        char[] chars= str.toCharArray();
        for (char c : chars) {
            // 记录是否合法,0 不合法 1 合法
            int flag = 0;
            // 遍历所有区间
            for (String s : ranges) {
                String[] compare = s.split("-");
                // 合法字符,跳出
                if (c >= Integer.parseInt(compare[0], 16) && c <= Integer.parseInt(compare[1], 16)) {
                    flag = 1;
                    break;
                }
            }
            // 有不合法的字符,返回false
            if (flag == 0) {
                return false;
            }
        }
        return true;
    }

通过以上方法,就可以过滤出来特殊字符了,如果想过滤地更加精确,细分一下Unicode编码的区间就可以了。

本文地址:https://blog.csdn.net/dsh153/article/details/107363908

相关标签: Java