java-编码笔记-字符替换加渐进缓存实验

本文介绍了一种基于缓存的字符串替换机制,通过从数据库获取替换规则并缓存以提高效率。示例代码展示了如何实现这一过程,包括初始化缓存、进行字符串替换以及更新缓存。

1.需求

1.1.安装制定的规则替换掉字符串

1.2.需要替换的规则是可选的

1.3.可选的规则保存在数据库中,需要一步步的构建缓存,即使用过的规则就缓存下来。

 2 代码

package testJava2;

import java.util.HashMap;
import java.util.Map;

public class CacheTest {
    public static void main(String[] args) {
	System.out.println("逐步缓存测试");
	CacheTest cachtest = new CacheTest();
	cachtest.main();
	//cachtest.replaceTest();
    }
    public void main() {
	String valueStr = "dddddd{1}dddd{2}";
	String temValueId = "2";
	String valueStr2 = "ssss{1}ssss{2}sss";
	System.out.println("变更前:"+valueStr);
	System.out.println("使用的map:"+getMapCache().getMap(temValueId).toString());
	System.out.println("替换后:"+replaceMapvalue(valueStr,temValueId));
	System.out.println("使用的map:"+getMapCache().getMap(temValueId).toString());
	System.out.println("变更前:"+valueStr2);
	
	System.out.println("替换后:"+replaceMapvalue(valueStr2,temValueId));
    }
    void replaceTest() {
	String valueStr = "dd{1}dddd{1}dddd{1}";
	valueStr = valueStr.replace("1", "2");
	System.out.println(valueStr);
    }
    
    public String replaceMapvalue(String valueStr,String valuemapid) {
	Map<String,Object> map = getMapCache().getMap(valuemapid);
	for (Map.Entry<String,Object> entry:map.entrySet()) {
	    valueStr = valueStr.replace(entry.getKey().toString(), entry.getValue().toString());
	}
	return valueStr;
    }
    MapCache mapCache = null;
    
    MapCache getMapCache() {
	if(mapCache==null) {
	    mapCache = new MapCache();
	}
	return mapCache;
    }
    class MapCache{
	String[] arr = {"a","b","c","d","e","f"};
	MapCache(){
	    for(int i=0;i<5;i++) {
		Map<String,Object> map = new HashMap<String,Object>();
		for(int j=0;j<3;j++) {
		    map.put(String.valueOf(j), arr[i]+"_value_"+arr[j]);
		}
		data.put(String.valueOf(i), map);
	    }
	}
	Map<String,Object> cache = new HashMap<String,Object>();
	Map<String,Object> data = new HashMap<String,Object>();
	Map<String,Object> getMap(String key) {
	    if(null ==cache.get(key)) {
		getMapByDatabase(key);
	    }
	    return (Map<String,Object>)cache.get(key);
	}
	void getMapByDatabase(String key){
	    Map<String,Object> map = (Map<String,Object>)data.get(key);
	    //考虑线程
	    cache.put(key, map);
	}
    }
}

3. 运行结果

逐步缓存测试
变更前:dddddd{1}dddd{2}
使用的map:{0=c_value_a, 1=c_value_b, 2=c_value_c}
替换后:dddddd{c_value_b}dddd{c_value_c}
使用的map:{0=c_value_a, 1=c_value_b, 2=c_value_c}
变更前:ssss{1}ssss{2}sss
替换后:ssss{c_value_b}ssss{c_value_c}sss

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值