https://files.cnblogs.com/liaolandemengxiang/%E6%96%B0%E5%BB%BA%E6%96%87%E4%BB%B6%E5%A4%B9.rar

首先转换成的格式是“pinyin+汉字”,对于多音字也要这么排列。另外要注意,对于同音不同声调的要剔除重复的,数字和特殊字符不需要进行转换。还有要注意大小写。

private String name2search(String name) {

        //Log.d("查询", name);
        name = name.replace(" ", "");
        char[] chars = name.toCharArray();
        HanyuPinyinOutputFormat defaultFormat = new HanyuPinyinOutputFormat();
        defaultFormat.setCaseType(HanyuPinyinCaseType.LOWERCASE);
        defaultFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);

        StringBuffer sb = new StringBuffer();
        for (int i = 0; i < chars.length; i++) {
            char c = chars[i];
            String[] pinyingStr;
            String cpinyin = "";
            try {
                pinyingStr = PinyinHelper.toHanyuPinyinStringArray(c,
                        defaultFormat);

                for (int j = 0; j < pinyingStr.length; j++) {
                    String pyandn = pinyingStr[j] + c;
                    if (!cpinyin.contains(pyandn)) {
                        cpinyin = cpinyin + pyandn;
                    }
                }
            } catch (BadHanyuPinyinOutputFormatCombination e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
                cpinyin = "" + c;
            } catch (Exception e) {
                cpinyin = "" + c;
            }
            cpinyin = cpinyin.replace("u:", "v");
            sb.append(cpinyin);
        }

        //Log.d("结果", sb.toString());
        return sb.toString();
    }

上面是转换的方法,要注意数字和特殊字符会抛出异常,捕获异常后把字符直接拼上就可以了。

最后还有v 和u:,转换出的结果是u:来表示V,所以这是需要进行替换。还有前面的两篇是讲模糊查询的思路的,可以一起看看。