java中汉字转拼音解决方案

最近遇到一个项目,这个项目的账号是用户的姓名拼音,原先是管理员自己录入数据,目前由于部分原因,有我这个系统维护人员,录入数据 200 多天数据,录入太麻烦了,所以写了这个脚本,自己填写根绝姓名生成账号,那接下来就让我们走入 TinyPinyin 的世界

目前汉字换拼音解决方案总览

  • TinyPinyin
  • Pinyin4j
  • JPinyin

  本次我们介绍的是 TinyPinyin,这是一个开源的类库,GitHub 仓库地址

简介

TinyPinyin 是适用于 Java 和 Android 的快速、低内存占用的汉字转拼音库。

特性

  1. 生成的拼音不包含声调,均为大写;
  2. 支持自定义词典,支持简体中文、繁体中文;
  3. 执行效率很高(Pinyin4J 的 4~16 倍);
  4. 很低的内存占用(不添加词典时小于 30KB)。

使用

仓库引入

  maven 仓库引入 jar

1
2
3
4
5
<dependency>
      <groupId>com.github.promeg</groupId>
      <artifactId>tinypinyin</artifactId>
      <version>2.0.3</version>
</dependency>

  gradle 引入仓库

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
buildscript {
  repositories {
    jcenter()
  }

  dependencies {
    compile 'com.github.promeg:tinypinyin:2.0.3' // TinyPinyin核心包,约80KB

    compile 'com.github.promeg:tinypinyin-lexicons-android-cncity:2.0.3' // 可选,适用于Android的中国地区词典

    compile 'com.github.promeg:tinypinyin-lexicons-java-cncity:2.0.3' // 可选,适用于Java的中国地区词典
  }
}

用法

  汉字转拼音 API

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
/**
 * 如果c为汉字,则返回大写拼音;如果c不是汉字,则返回String.valueOf(c)
 */
String Pinyin.toPinyin(char c)

/**
 * c为汉字,则返回true,否则返回false
 */
boolean Pinyin.isChinese(char c)

/**
 * 将输入字符串转为拼音,转换过程中会使用之前设置的用户词典,以字符为单位插入分隔符
 */
String toPinyin(String str, String separator)

  词典 API

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
// 添加中文城市词典
Pinyin.init(Pinyin.newConfig().with(CnCityDict.getInstance());

// 添加自定义词典
Pinyin.init(Pinyin.newConfig()
            .with(new PinyinMapDict() {
                @Override
                public Map<String, String[]> mapping() {
                    HashMap<String, String[]> map = new HashMap<String, String[]>();
                    map.put("重庆",  new String[]{"CHONG", "QING"});
                    return map;
                }
            }));

总结

  TinyPinyin 用法简单,执行效率高,对于小型项目不错。