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,所以这是需要进行替换。还有前面的两篇是讲模糊查询的思路的,可以一起看看。