工做中有個需求是找出文本中出現的QQ號、電話號碼等,可是咱們知道每每會遇到「玖二⑦零五三二玖、加口280570三、零Ⅲ壹壹872陸7844」,這裏我作了一個配置文件,實現這些關鍵詞的過濾,以後須要過濾的時候,讀取到Map中,把這些關鍵詞替換成,咱們須要的。因爲在配置文件中,固然不能用一次讀取一次了,正好想起了前兩天學習的單例模式。這裏選擇靜態內部類實現單例,保證線程安全的同時實現懶加載。java
配置文件安全
\u96F6=0 \u58F9=1 \u8D30=2 \u53C1=3 \u8086=4 \u4F0D=5 \u9646=6 \u67D2=7 \u634C=8 \u7396=9 \u4E00=1 \u4E8C=2 \u4E09=3 \u56DB=4 \u4E94=5 \u516D=6 \u4E03=7 \u516B=8 \u4E5D=9 \u2460=1 \u2461=2 \u2462=3 \u2463=4 \u2464=5 \u2465=6 \u2466=7 \u2467=8 \u2468=9 \u3007=0 \u2160=1 \u2161=2 \u2162=3 \u2163=4 \u2164=5 \u2165=6 \u2166=7 \u2167=8 \u2168=9 \u6263\u6263=qq \u6263q=qq \u53E3\u53E3=qq \u53E3=q
靜態內部類實現單例模式,讀取配置文件中的內容到Map中學習
import java.io.InputStream; import java.util.Enumeration; import java.util.Map; import java.util.Properties; import com.google.common.collect.Maps; /** * * <p> * PropertiesUtil 靜態內部類實現單例模式讀取配置文件 * 靜態內部類既能保證線程安全也能保證懶加載 * <p> * * @author <a href="mailto:yangkj@corp.21cn.com">yangkj</a> * @version * @since 2016年8月29日 */ public class PropertiesUtil { private static Map<String, String> proMap = Maps.newHashMap(); private static class PropertiesInstance { private static final PropertiesUtil props = new PropertiesUtil(); } public static PropertiesUtil getInstance() { return PropertiesInstance.props; } public Map<String, String> getPropMap() { return proMap; } private PropertiesUtil() { proMap = readProperties(); } /** * 去讀properties文件的內容,保存到Map中 * * @param propsName * @return */ @SuppressWarnings({ "rawtypes" }) private static Map<String, String> readProperties() { Properties props = new Properties(); try { InputStream in = PropertiesUtil.class.getClassLoader().getResourceAsStream("TipWordChange.properties"); props.load(in); Enumeration en = props.propertyNames(); while (en.hasMoreElements()) { String key = (String) en.nextElement(); String value = props.getProperty(key); proMap.put(key, value); } } catch (Exception e) { e.printStackTrace(); } return proMap; } }
測試類:測試
public static void main(String[] args) { PropertiesUtil props01 = PropertiesUtil.getInstance(); PropertiesUtil props02 = PropertiesUtil.getInstance(); System.out.println(props01 == props02); String testString = "零Ⅲ壹壹872陸7844"; for (String key : props01.getPropMap().keySet()) { if (testString.contains(key)) { testString = testString.replace(key, props01.getPropMap().get(key)); } } System.out.println(testString); }
測試結果:google