`

获取输入汉字的拼音简码

阅读更多
public class GetPinYin {


private char[] alphatable = {
        'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I',

        'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'
    };
private static int[] table = new int[27];

private static Map<String,String> rareWords;
    private static Map<String,String> bookFamilyNames;
    private static Map<String,String> bookFamilySurname;
   
static {

table[0]=0;
        table[1]=45253;
        table[2]=45761;
        table[3]=46318;
        table[4]=46826;
        table[5]=47010;
        table[6]=47297;
        table[7]=47614;
        table[8]=47614;
        table[9]=48119;
        table[10]=49062;
        table[11]=49324;
        table[12]=49896;
        table[13]=50371;
        table[14]=50614;
        table[15]=50622;
        table[16]=50906;
        table[17]=51387;
        table[18]=51446;
        table[19]=52218;
        table[20]=52218;
        table[21]=52218;
        table[22]=52698;
        table[23]=52980;
        table[24]=53689;
        table[25]=54481;
        table[26]=55289;


String file_name = new Constant().getClass().getClassLoader()
.getResource("rarewords.properties").getFile();

Properties prop = new Properties();
try {
prop.load(new FileInputStream(file_name));
} catch (Exception ex) {
Logit.errorLog(ex.getMessage(), new Throwable(ex));
}

rareWords = new HashMap<String, String>();
Iterator it=prop.entrySet().iterator();
while(it.hasNext()){
    Map.Entry entry=(Map.Entry)it.next();
    Object key = entry.getKey();
    Object value = entry.getValue();
    rareWords.put(key.toString(), value.toString());
}


String file_name_1 = new Constant().getClass().getClassLoader()
.getResource("rarewords111.properties").getFile();

Properties prop1 = new Properties();
try {
prop1.load(new FileInputStream(file_name_1));
} catch (Exception ex) {
Logit.errorLog(ex.getMessage(), new Throwable(ex));
}

bookFamilyNames = new HashMap<String, String>();
Iterator it1=prop1.entrySet().iterator();
while(it1.hasNext()){
Map.Entry entry=(Map.Entry)it1.next();
Object key = entry.getKey();
Object value = entry.getValue();
bookFamilyNames.put(key.toString(), value.toString());
}

String file_name_2 = new Constant().getClass().getClassLoader()
.getResource("rarewords222.properties").getFile();

Properties prop2 = new Properties();
try {
prop2.load(new FileInputStream(file_name_2));
} catch (Exception ex) {
Logit.errorLog(ex.getMessage(), new Throwable(ex));
}

bookFamilySurname = new HashMap<String, String>();
Iterator it2 = prop2.entrySet().iterator();
while(it2.hasNext()){
Map.Entry entry=(Map.Entry)it2.next();
Object key = entry.getKey();
Object value = entry.getValue();
bookFamilySurname.put(key.toString(), value.toString());
}


}

public String getRareWord(char ch) {
   Set<String> key = rareWords.keySet();
        for (Iterator it = key.iterator(); it.hasNext();) {
            String s = (String) it.next();
           if(rareWords.get(s).contains(String.valueOf(ch))) {
           return s.substring(0, 1).toUpperCase();
           }
        }
        return "0";
}
//根据一个包含汉字的字符串返回一个汉字拼音首字母的字符串
public String getPinYin(String SourceStr) {
     String Result = "";
     int StrLength = SourceStr.length();
     int i;
     try {
         for (i = 0; i < StrLength; i++) {
        
         if (i == 0) {
         //姓
         if (SourceStr.length() >= 2) {
         String tempBjx = getXin(SourceStr.substring(0, 2));
         if (tempBjx != "0") {
         //在百家姓中,复姓
         i++;
         Result += tempBjx;
         continue;
         } else {
         tempBjx = getXin(SourceStr.substring(0, 1));
         if (tempBjx != "0") {
             //在百家姓里
             Result += tempBjx;
             } else {
             char temp = Char2Alpha(SourceStr.charAt(0));
                 if (temp  == '0') {
                 Result += getRareWord(SourceStr.charAt(0));
                       } else {
                       Result +=  temp;
                       }
             }
         }
         } else {
         String tempBjx = getXin(SourceStr.substring(0, 1));
         if (tempBjx != "0") {
             //在百家姓里
             Result += tempBjx;
             } else {
             char temp = Char2Alpha(SourceStr.charAt(0));
                 if (temp  == '0') {
                 Result += getRareWord(SourceStr.charAt(0));
                       } else {
                       Result +=  temp;
                       }
             }
         }
         } else {
         //名
         char temp = Char2Alpha(SourceStr.charAt(i));
         if (temp  == '0') {
         Result += getRareWord(SourceStr.charAt(i));
               } else {
               Result +=  temp;
               }
         }
        
           
         }
     } catch (Exception e) {
         Result = "";
     }
     return Result;
}

@SuppressWarnings("static-access")
public String getXin(String Xin) {

if (Xin == null || Xin.equals("")) {
return "0";
}
if (Xin.length() > 1) {
Iterator it = this.bookFamilySurname.entrySet().iterator();
while(it.hasNext()){
    Map.Entry entry=(Map.Entry)it.next();
    String  key = entry.getKey().toString();
    String value = entry.getValue().toString();
    if (value.contains(Xin)) {
    return key.toUpperCase();
    }
}

} else {
Iterator it = this.bookFamilyNames.entrySet().iterator();
while(it.hasNext()){
    Map.Entry entry=(Map.Entry)it.next();
    String  key = entry.getKey().toString();
    String value = entry.getValue().toString();
    if (value.contains(Xin)) {
    return key.substring(0, 1).toUpperCase();
    }
}
}

return "0";
}

//主函数,输入字符,得到他的声母,
//英文字母返回对应的大写字母
//其他非简体汉字返回 '0'
public char Char2Alpha(char ch) {

     if (ch >= 'a' && ch <= 'z')
         return (char) (ch - 'a' + 'A');
     if (ch >= 'A' && ch <= 'Z')
         return ch;
     int gb = gbValue(ch);
     if (gb < table[0])
         return '0';
     int i;
     for (i = 0; i < 26; ++i) {
         if (match(i, gb))
             break;
     }

     if (i >= 26)
         return '0';
     else
         return alphatable[i];
}


private boolean match(int i, int gb) {
     if (gb < table[i])
         return false;

     int j = i + 1;

     //字母Z使用了两个标签
     while (j < 26 && (table[j] == table[i]))
         ++j;

     if (j == 26)
         return gb <= table[j];
     else
         return gb < table[j];

}

//取出汉字的编码
private int gbValue(char ch) {
     String str = new String();
     str += ch;
     try {
         byte[] bytes = str.getBytes("GB2312");
         if (bytes.length < 2)
             return 0;
         return (bytes[0] << 8 & 0xff00) + (bytes[1] &
                 0xff);
     } catch (Exception e) {
         return 0;
     }

}
分享到:
评论

相关推荐

    自动获取汉字的拼音简码

    本例子可以获取输入汉字的拼音的第实现。一个字母。本例子采用javabean方式

    vb下获取拼音码(含拼音简码数据库)

    vb下输入中文自动转换成拼音首字母,非常方便

    Delphi 成批将汉字转换为拼音码、五笔简码

     1、批量将汉字转换为拼音码、拼音简码、五笔码、五笔简码。  2、通过ODBC建立“.mdb”数据库,名字为:pywb,数据库选择执行程序目录下的“取拼音五笔码数据库.mdb”;  3、将要批量转换的内容录入“取拼音五笔...

    C#获取五笔码和拼音码

    C#取五笔码和拼音码 C#取五笔码和拼音码

    jquery输入简码获取城市列表

    输入简码或者中文,拼音,根据所输入内容下拉显示城市列表.

    js汉字转换拼音的插件

    * 获取汉字的简码拼音 */ 2、/* * 如果是两个汉字则直接输入汉字的全拼 * 如果是三个以上的汉字,第一个汉字全拼,后面的汉字简码 */ 3、/* * 如果是两个汉字则直接输入汉字的全拼 * 如果是三个以上的汉字,...

    oracle生成拼音、五笔首字母的functions方法

    oracle生成拼音、五笔首字母的functions方法,亲测有效!!!

    生成五笔代码 拼音代码

    根据你输入的汉子 自动生成五笔代码和拼音代码(简码:取每个汉子的拼音的首字母或者每个汉子的五笔的首字母)本人写了两个存储过程 其实几乎差不多 但是往往啊 会因为一点点小问题导致代码失败 不过 下面的两个存储...

    智能陈桥五笔使用方法.doc

    智能陈桥五笔还包含了陈桥拼音输入功能,即使在无法用五笔输入时,也能通过拼音进行高效输入,同时还能获取汉字的五笔编码。此外,系统支持GB/BIG5双内码,可以在繁体Windows系统下正常使用,并可挂接其他输入法,如...

    配置好的傻瓜化小狼毫全拼+多种双拼+五笔86-98+笔画输入法v200312 - 17种方案

    拼音状态输入“`”可进入笔画输入,使用横(h)竖(s)撇(p)捺(n)/点(d)折(z),逐个笔画“拼”出汉字。 5.整合了图形化设置工具,以解决小狼毫的参数图形化设置不便的问题。 6.部署时可自行选择主打输入方案,选好即用...

    delphi 开发经验技巧宝典源码

    0228 如何获取汉字拼音简码 151 0229 根据用户输入需求自动调整输入法 152 0230 根据生日自动计算年龄 153 0231 实现找零功能 153 0232 设计带记忆的数据录入窗口 154 0233 在窗体关闭时提示有未保存的...

    delphi 开发经验技巧宝典源码06

    0228 如何获取汉字拼音简码 151 0229 根据用户输入需求自动调整输入法 152 0230 根据生日自动计算年龄 153 0231 实现找零功能 153 0232 设计带记忆的数据录入窗口 154 0233 在窗体关闭时提示有未保存的...

    Delphi开发范例宝典目录

    实例037 使窗体标题栏文字右对齐 47 实例038 没有标题栏但可以改变大小的窗口 48 1.11 设置窗体位置 49 实例039 不可移动的窗体 49 实例040 设置窗体在屏幕中的位置 50 实例041 始终在最上面的窗体 51 ...

Global site tag (gtag.js) - Google Analytics