`

自己写的一个繁体到简体的转换程序

阅读更多

          今天调研一个任务,基于java的filter实现繁体到简体的转换,于是写了一个demo,给各位博友奉上,欢迎批评指正。

         实现的思路是重载request的调取参数的几个方法,然后做下转换。

          转换类用的是网上的ZHConverter,就不多讲了,看一个例子就好:

          

public class Test {
	public static void main(String[] args) throws Exception {
		// Instantiation will fetch the property file which load the Chinese character mappings
		ZHConverter converter = ZHConverter.getInstance(ZHConverter.SIMPLIFIED);

		String traditionalSrc = "有背光的機械式鍵盤";
		String simplified = converter.convert(traditionalSrc);
		System.out.println(simplified);


		// Or 
		String simplifiedSrc = "简体字";
		String traditional = ZHConverter.convert(simplifiedSrc, ZHConverter.TRADITIONAL);
		System.out.println(traditional);    
	}
}

 

            1. 首先实现一个filter

           

/**
	 * @see Filter#doFilter(ServletRequest, ServletResponse, FilterChain)
	 */
	public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
		 // perform request filtering  
        HttpServletRequest httpServletRequest = (HttpServletRequest) request;  
        CharChangeHttpRequest requestWrapper  = new CharChangeHttpRequest(httpServletRequest);              
       
        // continue the filter chain  
        chain.doFilter(requestWrapper, response);
          
        // perform response filtering  
	}

          

   2. 由于自己封装了HttpServletRequest, 下面是自己写的实现

       

public class CharChangeHttpRequest extends HttpServletRequestWrapper {
	public CharChangeHttpRequest(HttpServletRequest request) {
		super(request);
	}

	@Override
	public String[] getParameterValues(String name) {
		String[] value = super.getParameterValues(name);
		if(value == null){
			return null;
		} else {
			String[] rValues = new String[value.length];
			for(int i = 0; i < rValues.length; i++){
				rValues[i] = convert(value[i]);
			}
			return rValues;
		}
    }

	@Override
     public String getParameter(String name) {
        String value = super.getParameter(name);
        if(value == null || value.length() == 0){
        	return value;
        }
        
        return convert(value);
     }
     
     private String convert(String value){
    	 ZHConverter converter = ZHConverter.getInstance(ZHConverter.SIMPLIFIED);
         try {
 			return converter.convert(new String(value.getBytes("iso-8859-1"),"utf-8"));
 		} catch (UnsupportedEncodingException e) {
 			// TODO Auto-generated catch block
 			e.printStackTrace();
 		}
         return "";
     }
     
     private String[] convert(String[] values){
    	 String[] rValues = new String[values.length];
			for(int i = 0; i < rValues.length; i++){
				rValues[i] = convert(values[i]);
			}
			return rValues;
     }
     
     @Override
     public Map getParameterMap() {
    	 Map originMap = super.getParameterMap();
         Map<String,String[]> newMap = new HashMap<String,String[]>(originMap); 
         for (Iterator it = newMap.entrySet().iterator(); it.hasNext();) {
             Map.Entry entry = (Map.Entry)it.next();
             entry.setValue(convert((String[])entry.getValue()));
         }
         return Collections.unmodifiableMap(newMap);
     }

}

      

    由于时间有限,写的比较仓促,如有考虑不周情况,请大家批评指正。

 

       

4
4
分享到:
评论
5 楼 lzlg302 2014-07-31  
受用了
4 楼 qiuyusir 2014-07-30  
3 楼 永志_爱戴 2014-07-30  
这个知识点可以收藏,留着以后用
2 楼 asialee 2014-07-29  
kt431128 写道
你使用繁体字和简体字的词库吗?ZHConverter 这个里面带的有吗?

ZHConverter里面有字库,我这个zip包里面的字库就是直接下载的它的。
1 楼 kt431128 2014-07-29  
你使用繁体字和简体字的词库吗?ZHConverter 这个里面带的有吗?

相关推荐

Global site tag (gtag.js) - Google Analytics