`
oboaix
  • 浏览: 269714 次
社区版块
存档分类
最新评论

Java拼音转换一例

    博客分类:
  • JAVA
 
阅读更多

      工作中有时碰到将中文名转换成首字母拼音书写。以前工作电脑故障,资料尽失,这里补充回一点,

参考网站:http://pinyin4j.sourceforge.net/,当前版本: pinyin4j 2.5.0

关键是知道有这么个开源jar包可以使用,没有什么特别的,使用起来很简单,代码中使用一点小算法。

 

package com.pinying.demo;

import java.util.ArrayList;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Set;

import net.sourceforge.pinyin4j.PinyinHelper;

/**
 * Chinese character convert to Pinyin(include tongying character combine), return String Array
 * Description: Previously documented, computer failure, all data is lost, now slowly accumulated
 * @author zhaoxiaobo Dennis Email: zxbxiaobo@sina.com
 * @createdTime:2012-11-27
 */
public class PinyinDemo {

    private static Set<String> set = new HashSet<String>(0);
    private static int NUMNER = 0;
    private static String CHINESE_CHAR = "给予你长久的力量";//test data
//    private static String CHINESE_CHAR = "黄长恩";//test data
//    private static String CHINESE_CHAR = "赵晓波";//test data
//    private static String CHINESE_CHAR = "胡胜利";//test data
//    private static String CHINESE_CHAR = "张三丰";//test data

    static {
        NUMNER = CHINESE_CHAR.length();
    }

    public static void main(String[] args) {
//        List<List<String>> lists = new ArrayList<List<String>>(0);
//        List<String> list = new ArrayList<String>(0);
//        list.add("a");
//        list.add("b");
//        lists.add(list);
//        List<String> list1 = new ArrayList<String>(0);
//        list1.add("c");
//        list1.add("d");
//        lists.add(list1);
//        List<String> list2 = new ArrayList<String>(0);
//        list2.add("e");
//        list2.add("f");
//        lists.add(list2);
//        List<String> list3 = new ArrayList<String>(0);
//        list3.add("g");
//        list3.add("h");
//        lists.add(list3);
        generateData(getFirstCharFromString(CHINESE_CHAR), new ArrayList<String>(0));
        Iterator<String> it = set.iterator();
        while (it.hasNext()) {
            System.out.println(it.next());
        }
    }

    /**
     *  获取一段中文字符拼音首字母的(包括多音字的组合)数组
     * getFirstCharFromString
     * @param str
     * @return
     * @return the List<List<String>>
     */
    public static List<List<String>> getFirstCharFromString(String str) {
        List<List<String>> rets = new ArrayList<List<String>>(0);
        if (null != str && !"".equals(str.trim())) {
            int len = str.trim().length();
            char chr = ' ';
            for (int i = 0; i < len; i++) {
                Set<String> set = new HashSet<String>(0);
                chr = str.charAt(i);
                if (0x4E00 <= chr && chr <= 0x9FA5) {
                    String[] arr = PinyinHelper.toHanyuPinyinStringArray(chr);
                    for (String string : arr) {
                        set.add(string.toUpperCase().charAt(0) + "");
                    }
                } else {
                    set.add(chr + "");
                }
                List<String> list = new ArrayList<String>(0);
                Iterator<String> it = set.iterator();
                while (it.hasNext()) {
                    list.add(it.next());
                }
                rets.add(list);
            }
        } else {
            System.out.println("null value ....");
        }
        return rets;
    }

    /**
     *  生成最终的数组组合数据根据排列组合算法
     * generateData
     * @param source
     * @param target
     * @return the void
     */
    public static void generateData(List<List<String>> source, List<String> target) {
        StringBuilder sb = new StringBuilder();
        if (target.size() == NUMNER) {
            for (String string : target) {
                sb.append(string);
            }
            set.add(sb.toString());
            return;
        }
        //{{'a','b'},{'c','d'},{'e','f'}}
        for (List<String> list : source) {
            List<List<String>> newSource = new ArrayList<List<String>>(source);
            List<String> newTarget = new ArrayList<String>(target);
            newSource.remove(list);
            for (String str : list) {
                newTarget.add(str);
                generateData(newSource, newTarget);
                newTarget.remove(str);
            }
            break;
        }
    }
}

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics