根据数据库表名生成一个字典,导入输入法。方便输入。

/*
 * 因为数据库表很多,而且表名都特别长,如果不注意很容易输入错误。
 * 为了输入方便,所以把各个表单词的头文字提取出来,作为输入法的热键
 * 热键和实际的表名一一对应,生成一个字典。然后导入输入法。笔者以Google输入法为例。
 *
 * example:
 * ehd->ELE_HISTORY_DEFINITION
 * eccs->ELE_CUSTTRADE_CONTRL_SET
 */

import java.io.File;
import java.io.FileReader;
import java.io.LineNumberReader;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class DictGenerator {

	/**
	 * @param args
	 * @throws IOException 
	 * @throws InterruptedException 
	 */
	
	private List<String> lst = new ArrayList<String>();
	
	private Map<String , String> dict = new HashMap<String , String>();
	
	//如果key相同,把后者自动加一
	private  int maker = 1;
	
	public static void main(String[] args) throws Exception {

		String path = "C:\\s.txt";
		
		DictGenerator dic = new DictGenerator();
		
		dic.locatedFile(path);
		
		dic.calc();
		
	}
	/*
	 * 生成key
	 */
	public  String generate(String original){
		
		StringBuilder outputStr = new StringBuilder();
		
		char prefix = original.trim().charAt(0);
		
		outputStr.append(Character.toString(prefix));
		
		for ( int i = 0 ; i<original.trim().length();i++ ){
			
			if ( original.charAt(i) == '_'){
				char key = original.charAt(i+1);
				outputStr.append(Character.toString(key));
			}
		}

		String key = outputStr.toString().toLowerCase();;
		
		//当key相同时的处理逻辑,不好!
		if ( !lst.contains(key) ){
			lst.add(key);
			dict.put(key, original);
			return key;
		}else{
			String temp = key + (maker++);
			lst.add(temp);
			dict.put(temp, original);
			return temp;
		}
	}
	
	/*
	 * 根据源文件,打印key与实际表名。
	 */
	public  void locatedFile(String sourcePath) throws Exception{
		
		FileReader reader = new FileReader(new File(sourcePath));
		
		LineNumberReader br = new LineNumberReader(reader);
		
		String str = null;
		
		while ( (str=br.readLine()) != null){
			System.out.print(this.generate(str)+ "\t");
			System.out.println(str);
			
			
		}
		
		br.close();
		reader.close();
		
	}
	
	public  void calc(){
		System.out.println("list个数:" + lst.size());
		System.out.println("map键值数:" + dict.size());
	}
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值