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

本文介绍了一种在Java中过滤特殊字符的有效方法,包括如何识别并处理增补字符,以及如何通过限定Unicode编码区间来进一步精确过滤。适用于需要对文本进行预处理的场景。

首先,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编码的区间就可以了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值