單例模式實現讀取配置文件


  工作中有個需求是找出文本中出現的QQ號、電話號碼等,但是我們知道往往會遇到“玖二⑦零五三二玖、加口2805703、零Ⅲ壹壹872陸7844”,這里我做了一個配置文件,實現這些關鍵詞的過濾,之后需要過濾的時候,讀取到Map中,把這些關鍵詞替換成,我們需要的。由於在配置文件中,當然不能用一次讀取一次了,正好想起了前兩天學習的單例模式。這里選擇靜態內部類實現單例,保證線程安全的同時實現懶加載。

配置文件

\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);
    }

測試結果:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM