/*
* 因为数据库表很多,而且表名都特别长,如果不注意很容易输入错误。
* 为了输入方便,所以把各个表单词的头文字提取出来,作为输入法的热键
* 热键和实际的表名一一对应,生成一个字典。然后导入输入法。笔者以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());
}
}