就目前來說,我項目里用的是直接封裝需要過濾的詞,到一個數(shù)組,然后將輸入串進行匹配,當相等時,就過濾掉。這種做法太呆板了,根本沒什么含量,今天在網(wǎng)上無意中看到這個工具類,感覺不錯,有點思想,改天有時間研究下,將我現(xiàn)項目里過濾給替換掉。呵,先放著了。
words.properties
Properties
屬性
package com.Gavin.wap;

import java.io.IOException;
import java.io.InputStream;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Enumeration;
import java.util.Properties;
import java.util.regex.Pattern;
import java.util.regex.Matcher;

public class KeywordFilter {
private static Pattern pattern = null;

public static void initPattern() {
StringBuffer patternBuf = new StringBuffer();
try {
InputStream in = KeywordFilter.class.getClassLoader().getResourceAsStream("words.properties");
Properties properties = new Properties();
properties.load(in);
Enumeration<?> enu = properties.propertyNames();
while (enu.hasMoreElements()) {
patternBuf.append((String) enu.nextElement() + "|"); //讀取所有properties里的詞,以 | 分隔
}
patternBuf.deleteCharAt(patternBuf.length() - 1);
//默認下,properties文件讀取編碼: ISO8859-1
pattern = Pattern.compile(new String(patternBuf.toString().getBytes("ISO-8859-1"), "UTF-8"));
} catch (IOException e) {
e.printStackTrace();
}
}

public static String doFilter(String str) {
System.out.println("str:" + str);
try {
Matcher m = pattern.matcher(str);
str = m.replaceAll("*");
} catch (Exception e) {
e.printStackTrace();
}
return str;
}

public static void main(String[] args) {
String str = "Properties 類表示了一個持久的屬性集。Properties 可保存在流中或從流中加載。屬性列表中每個鍵及其對應值都是一個字符串。";
initPattern();
try {
System.out.println(KeywordFilter.doFilter(str));
} catch (Exception e) {
e.printStackTrace();
}
}

}
words.properties





























































