<!-- 汉字转拼音-->
<dependency>
<groupId>com.github.promeg</groupId>
<artifactId>tinypinyin</artifactId>
<version>2.0.3</version>
</dependency>
可以结合我的另一篇文章来看,https://blog.csdn.net/weixin_41228362/article/details/105157346,这篇文章实现了,从resource目录下读csv的字典文件,来处理多音字。
import com.github.promeg.pinyinhelper.Pinyin;
import com.github.promeg.pinyinhelper.PinyinMapDict;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.HashMap;
import java.util.Map;
public class PinYinUtil {
static Logger logger = LoggerFactory.getLogger(PinYinUtil.class);
private PinYinUtil(){
}
public static void init(String fileName){
Pinyin.init(Pinyin.newConfig()
.with(new PinyinMapDict() {
@Override
public Map<String, String[]> mapping() {
Map<String,String[]> map = new HashMap<>();
String filePath = "pinyin/" + fileName;
map = CsvUtils.readCSV(filePath,new String[]{"word","pinyin"});
return map;
}
}));
}
/*
* @Author
* @Description 汉词转为拼音首字母缩写
* @Date 14:38 2020/3/4
* @Param
* @return
**/
public static String convertToAbbreviation(String turnStr) {
return getTurnResult(turnStr,true);
}
/*
* @Author liushilei
* @Description 汉词转为拼音
* @Date 14:44 2020/3/4
* @Param
* @return
**/
public static String convertToPinYin(String turnStr) {
return getTurnResult(turnStr,false);
}
/*
* @Author
* @Description 根据isAbbreviation判断返回首字母缩写还是拼音
* @Date 16:40 2020/3/4
* @Param
* @return
**/
private static String getTurnResult(String turnStr,Boolean isAbbreviation) {
if(turnStr == null || ConstantField.EMPTYSTRING.equals(turnStr))
return ConstantField.EMPTYSTRING;
StringBuilder pinYinStr = new StringBuilder();
StringBuilder abbreviationStr = new StringBuilder();
for (int i = 0; i < turnStr.length(); i++) {
char c = turnStr.charAt(i);
if (c >= 33 && c <= 126) {// 字母和符号原样保留
pinYinStr.append(String.valueOf(c).toLowerCase());
abbreviationStr.append(String.valueOf(c).toLowerCase());
} else {// 累加拼音声母
pinYinStr.append(Pinyin.toPinyin(String.valueOf(c),ConstantField.EMPTYSTRING).toLowerCase());
abbreviationStr.append(Pinyin.toPinyin(String.valueOf(c),ConstantField.EMPTYSTRING).toLowerCase().charAt(0));
}
}
if(isAbbreviation){
return abbreviationStr.toString();
}
return pinYinStr.toString();
}
}