JAVA特殊字符过滤方法

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JAVA特殊字符过滤方法相关的知识,希望对你有一定的参考价值。

我在一个传入一个字符串,字符串里面含有非法字符的话就过滤掉
非法字符如下 !#%'?;\&`<>$^"/@~∩_∩,~•#×※§≈★… 、! ? • 《》 ” “ °0oo0 |[]『 』 【】^•〖〗「」〃±∑∏∪∩∈√⊥⊙∮≡≌∠∞∵∫℃£‰ ..
然后返回一个过滤掉这些的字符串

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();
追问

哥们.. 你这个网上找的 不行...
我自己放几个连续一起的关键字就没法了..

追答

呵呵,我没测试过,网上流传的就是这个版本。不行的话,那就要根据输入的中文编码不同来判断了,中文占用两个以上字节。所以首先要确认编码,然后用字节数组判断
例如: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)
...

追问

谢谢了哟.. 再等等看有其他的方法没有

追答

哈哈,有时候最古老的方法最狠。正则表达式那要花一些脑筋上去了。

追问

我就是觉得正则有点痛苦..所以还没写.
谢谢了.

参考技术A 这个问题入手点是遍历字符串,逐一匹配非法字符。只是,非法字符很多的时候,资源消耗就很大。
怎么办呢?反过来想,扣除这些非法字符后,还剩下什么字符?应该是ASC码和中文字符的子集了。所以,过滤条件是:保留特定ASC码(不需要过滤的ASC码),和中文字符。完成。追问

的确资源消耗这是个问题...可是这个也没法避免 ....因为有这个需求,只能说尽量去优化一下..
扣除这些非法字符后,还剩下什么字符? 还剩下我需要的汉字,但是有可能有的时候也会需要出现符号,只要这些符号不是出现在非法符号里面就没什么..
保留特定ASC码(不需要过滤的ASC码),和中文字符。完成? 能写例子不
以前没有这么做过.. 如果能提供个例子,就非常感谢了

java正则表达式过滤特殊字符

现有一个字符串,要求不能包含' " %这样的特殊字符,只需要用正则表达式校验出来就行了,自己写的是[^\\'\\\"\\%],显然这是不对的。。求大神帮忙!!请注意是java程序

参考技术A String regexp = "[^'\\"%]*";
String string = "abc%";
System.out.println (string.matches (regexp));

本回答被提问者采纳
参考技术B public class Test40032 
public static void main(String[] args) 
String regx = "['\\"%]";
String input = "11%11";
System.out.println(input);
Pattern p = Pattern.compile(regx);
Matcher m = p.matcher(input);
System.out.println(!m.find());

以上是关于JAVA特殊字符过滤方法的主要内容,如果未能解决你的问题,请参考以下文章

java过滤特殊字符的问题

jsp\java如何编写过滤器过滤特殊字符

java正则表达式过滤特殊字符

PHP怎样过滤中文状态下特殊字符(比如标点符号)?

Java用正则表达式 过滤特殊字符,只允许中文、字母或数字,该怎么写?急。。。。

如何用js或则jquery过滤特殊字符