文章自动添加超链接

在网上可以发现,很多文章中的关键词会有超链接,超链接的实现可以由编辑手动添加,但这样工作量大。如果能实现发表文章时自动添加超链接,编辑工作将会有很大的提升。

 

词库采用hashtable数据结构(最终实现是HashMap)。

 

下面是代码的实现:十万的词库,一万字的文章,自动标注在本机上测试只需要100ms,个人觉得效率还不错。

 

public class test {

	public static void main(String[] args) {

		Map dict = createDict();
		StringBuilder content = new StringBuilder("我想要一辆宝马的宝马X3或者是奥迪的奥迪A4L,如果是比亚迪F0或者吉利的车送给我也不要。");
		for(int i = 0;i < 500;i++){
			content.append("我想要一辆宝马的宝马X3或者是奥迪的奥迪A4L,如果是比亚迪F0或者吉利的车送给我也不要。");
		}
		long startTime = System.currentTimeMillis();
		String result = autoReplace(dict, content.toString()); 
		long endTime = System.currentTimeMillis();
		System.out.println("方法被执行,花费时间" + (endTime - startTime) + "ms");
		System.out.println(result);
	}

	/**
	 * 
	 * @Description: 将文章中的关键词用其他一些词来替换,比如加上a标签超链接等 
	 * @param map 替换词库
	 * @param content 文章内容
	 * @return    参数说明  替换后的文章内容
	 */
	    private static String autoReplace(Map map, String content) {
        //得到词库的Key最大长度,以便确定切割的最大长度
        Set keys = map.keySet();
        int keylength = 0;
        for (String k : keys) {
            keylength = keylength < k.length() ? k.length() : keylength;
        }
        StringBuilder newContent = new StringBuilder(content);
        for (int i = 0; i < keylength; i++) {
            newContent.append(" ");
        }
        StringBuilder result ;
         
        for (int i = 0; i < newContent.length() - keylength; i++) {
            StringBuilder key = new StringBuilder("");
            StringBuilder temp = new StringBuilder("");
            boolean flag = false;
            for (int j = keylength; j >= 1; j--) {
                key = new StringBuilder(newContent.substring(i, i + j));
                if (map.get(key.toString()) != null) {
                    temp.append(map.get(key.toString()));
                    i = i + j - 1;
                    flag = true;
                    break;
                }
            }
            if (!flag) {
                temp.append(newContent.charAt(i));
            }
            result.append(temp);
        }
        return result.append(newContent.substring(newContent.length() - keylength))
                .toString().trim();
    }
	
	/**
	 * 
	 * @Description: 创建一个词库 
	 */
	private static Map createDict(){
		Map map = new HashMap<>();
		map.put("宝马", "宝马");
		map.put("宝马X3", "宝马X3");
		map.put("奥迪", "奥迪");
		map.put("奥迪A4L", "奥迪A4L");
		map.put("比亚迪F0", "比亚迪F0");
		map.put("吉利", "吉利");
		for (Integer i = 0; i < 100000; i++) {
			map.put(i.toString(), "吉利");
		}
		return map;
	}
}

 

你可能感兴趣的:(JAVA)