Java通过Unicode编码过滤特殊字符
程序员文章站
2022-07-06 08:30:08
首先,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
下一篇: python 如何调用远程接口