最近要实现一个根据词语得到词语对应拼音的功能,找到了Jpinyin这个开源工具包,使用下来发现它非常强大,完全满足我的需求,下面对它做一个简单的介绍,希望能够帮助到有需要的朋友。
一、项目介绍:
JPinyin是一个汉字转拼音的Java开源类库,在PinYin4j的功能基础上做了一些改进。
二、实现原理:
通过阅读源代码发现,JPinyin的实现原理是通过将生字、词组和对应的拼音以及简繁汉字存放在数据库,然后通过代码操作数据库来实现汉字/词组转拼音和汉字简繁互转的,数据库都是加密的,不能扩充,但这个工具已经比较完善了,没有必要自己去扩充数据库,经本人测试,未发现有转换错误的问题。
Jpinyin里面一共有四个类:
ChineseHelper.java 汉字简繁体转换类
PinyinFormat.java 拼音格式类
PinyinHelper.java 汉字转拼音类
PinyinResource.java 资源文件加载类
本文只介绍汉字转拼音PinyinHelper,简繁转换ChineseHelper不作介绍,其中PinyinHelper的公用接口如下:
/**
* 将单个汉字转换为相应格式的拼音下面是我写的一个demo程序,实现对汉字转拼音各接口的调用,使用起来非常简单。
public class JPinyinDemoActivity extends BaseActivity {
@Override
public void setContentView() {
setContentView(R.layout.activity_jpinyin_demo_layout);
}
@Override
public void findViews() {
mWordsEditTxt = ( EditText )findViewById(R.id.wordsEditTextId);
mResultTxt = ( TextView )findViewById(R.id.resultTxtId);
InputLenLimit.lengthFilter( this, mWordsEditTxt );
}
@Override
public void getData() {
}
@Override
public void showContent() {
testJPinyin( );
}
public void onClick( View v ){
switch( v.getId( ) ){
case R.id.toPinyinBtnId:{
clickWordsToPinyin( );
}
break;
default:{
}
break;
}
}
private String wordsToPinyin( String words ){
if( TextUtils.isEmpty( words ) ){
return null;
}
String pinyin = PinyinHelper.convertToPinyinString( words, " ");
return pinyin;
}
private void clickWordsToPinyin( ){
String pinyin = wordsToPinyin( mWordsEditTxt.getText( ).toString( ) );
if( !TextUtils.isEmpty( pinyin ) ){
mResultTxt.setText( pinyin );
}
}
private void testJPinyin( ){
String words = "和气生财";
boolean hasMultiPinyin = false;
String pinyin = null;
String[] pinyins = null;
final String separator = " ";
// hé qì shēng cái
pinyin = PinyinHelper.convertToPinyinString(words, separator);
println( pinyin );
// WITH_TONE_NUMBER--数字代表声调,WITHOUT_TONE--不带声调,WITH_TONE_MARK--带声调
// hé qì shēng cái
pinyin = PinyinHelper.convertToPinyinString(words, separator, PinyinFormat.WITH_TONE_MARK);
println( pinyin );
// he2 qi4 sheng1 cai2
pinyin = PinyinHelper.convertToPinyinString(words, separator, PinyinFormat.WITH_TONE_NUMBER);
println( pinyin );
// he qi sheng cai
pinyin = PinyinHelper.convertToPinyinString(words, separator, PinyinFormat.WITHOUT_TONE);
println( pinyin );
// hé hè huó huò hú
pinyins = PinyinHelper.convertToPinyinArray( words.toCharArray()[ 0 ] );
println( pinyins );
// hé hè huó huò hú
pinyins = PinyinHelper.convertToPinyinArray( words.toCharArray()[ 0 ], PinyinFormat.WITH_TONE_MARK );
println( pinyins );
// hqsc
pinyin = PinyinHelper.getShortPinyin( words );
println( pinyin );
// true
hasMultiPinyin = PinyinHelper.hasMultiPinyin( words.toCharArray( )[ 0 ] );
println( hasMultiPinyin );
}
private void println( String result ){
System.out.println( "result == " + result );
}
private void println( String[] results ){
for( String result : results ){
System.out.println( "result == " + result + " " );
}
}
private void println( boolean hasMultiPinyin ){
System.out.println( "result == " + hasMultiPinyin );
}
private TextView mResultTxt = null;
private EditText mWordsEditTxt = null;
}原文地址:http://blog.csdn.net/ekeuy/article/details/40079475