JAVA特殊字符过滤方法
我在一个传入一个字符串,字符串里面含有非法字符的话就过滤掉非法字符如下!#%'?;\&`<>$^"/@~∩_∩,~•#×※§≈★…、!?•《》”“...
我在一个传入一个字符串,字符串里面含有非法字符的话就过滤掉
非法字符如下 !#%'?;\&`<>$^"/@~∩_∩,~•#×※§≈★… 、! ? • 《》 ” “ °0oo0 |{}[]『 』 【】^•〖〗「」〃±∑∏∪∩∈√⊥⊙∮≡≌∠∞∵∫℃£‰ ..
然后返回一个过滤掉这些的字符串 展开
非法字符如下 !#%'?;\&`<>$^"/@~∩_∩,~•#×※§≈★… 、! ? • 《》 ” “ °0oo0 |{}[]『 』 【】^•〖〗「」〃±∑∏∪∩∈√⊥⊙∮≡≌∠∞∵∫℃£‰ ..
然后返回一个过滤掉这些的字符串 展开
2个回答
展开全部
public static String StringFilter(String str) throws PatternSyntaxException {
// 只允许字母和数字
// String regEx = "[^a-zA-Z0-9]";
// 清除掉所有特殊字符
String regEx="[`~!@#$%^&*()+=|{}':;',\\[\\].<>/?~!@#¥%……&*()——+|{}【】‘;:”“’。,、?]";
Pattern p = Pattern.compile(regEx);
Matcher m = p.matcher(str);
return m.replaceAll("").trim();
}
// 只允许字母和数字
// String regEx = "[^a-zA-Z0-9]";
// 清除掉所有特殊字符
String regEx="[`~!@#$%^&*()+=|{}':;',\\[\\].<>/?~!@#¥%……&*()——+|{}【】‘;:”“’。,、?]";
Pattern p = Pattern.compile(regEx);
Matcher m = p.matcher(str);
return m.replaceAll("").trim();
}
更多追问追答
追问
哥们.. 你这个网上找的 不行...
我自己放几个连续一起的关键字就没法了..
追答
呵呵,我没测试过,网上流传的就是这个版本。不行的话,那就要根据输入的中文编码不同来判断了,中文占用两个以上字节。所以首先要确认编码,然后用字节数组判断
例如:ANSI 编码,"中文123" (占7字节)
Unicode 编码,"中文123" (占10字节),具体细节比较复杂,要参考相关书籍,有关字节字符ASC码等。
自己定义过滤法则:
public class FilterSpecial
{
public static String filter(String input)//传值到这里
{
if(!hasSpecialChars(input))//如果没有,就返回原字符串
{
return input;
}
StringBuffer filtered =new StringBuffer(input.length());
char c;
for(int i=0; i ':filtered.append( "> "); break;
case ' " ':filtered.append( "&uot; "); break;
case '& ':filtered.append( "& "); break;
default: filtered.append(c);
}
}
return (filtered.toString());
}
public static boolean hasSpecialChars(String input)//判断特殊字符
{
boolean flag=false;
if((input!=null)&&(input.length()> 0))
{
char c;
for(int i=0; i ': flag=true; break;
case ' < ': flag=true; break;
case ' " ': flag=true; break;
case '& ': flag=true; break;
}
}
}
return flag;
}
}
或者用强行替代法:
...
public String replace(char oldChar, char newChar)
...
展开全部
这个问题入手点是遍历字符串,逐一匹配非法字符。只是,非法字符很多的时候,资源消耗就很大。
怎么办呢?反过来想,扣除这些非法字符后,还剩下什么字符?应该是ASC码和中文字符的子集了。所以,过滤条件是:保留特定ASC码(不需要过滤的ASC码),和中文字符。完成。
怎么办呢?反过来想,扣除这些非法字符后,还剩下什么字符?应该是ASC码和中文字符的子集了。所以,过滤条件是:保留特定ASC码(不需要过滤的ASC码),和中文字符。完成。
追问
的确资源消耗这是个问题...可是这个也没法避免 ....因为有这个需求,只能说尽量去优化一下..
扣除这些非法字符后,还剩下什么字符? 还剩下我需要的汉字,但是有可能有的时候也会需要出现符号,只要这些符号不是出现在非法符号里面就没什么..
保留特定ASC码(不需要过滤的ASC码),和中文字符。完成? 能写例子不
以前没有这么做过.. 如果能提供个例子,就非常感谢了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询