Android-实现汉字转拼音支持一词多音
2015-08-31 23:50
591 查看
实现汉字转拼音支持一词多音
源码下载地址:http://download.csdn.net/detail/u014657752/9071427
结果如图:
![](https://img-blog.csdn.net/20150901191723911?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
该项目需要使用到jar包,jar包在源码项目里面;
布局代码:
activity_main.xml
Pinyin.java
MainActivity.java
源码下载地址:http://download.csdn.net/detail/u014657752/9071427
结果如图:
该项目需要使用到jar包,jar包在源码项目里面;
布局代码:
activity_main.xml
<span style="font-family:KaiTi_GB2312;font-size:18px;"><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context=".MainActivity"> <TextView android:id="@+id/tv" android:textSize="30sp" android:layout_centerVertical="true" android:layout_centerHorizontal="true" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <EditText android:textSize="30sp" android:layout_below="@+id/tv" android:id="@+id/et" android:layout_centerHorizontal="true" android:layout_centerVertical="true" android:layout_width="match_parent" android:layout_height="wrap_content" /> <Button android:layout_centerVertical="true" android:layout_centerHorizontal="true" android:layout_below="@+id/et" android:onClick="click" android:text="开始转换" android:layout_width="match_parent" android:layout_height="wrap_content" /> </RelativeLayout> </span>
Pinyin.java
<span style="font-family:KaiTi_GB2312;font-size:18px;">package com.example.yu_longji.android29; /** * Created by yu_longji on 2015/9/1. */ import net.sourceforge.pinyin4j.PinyinHelper; import net.sourceforge.pinyin4j.format.HanyuPinyinCaseType; import net.sourceforge.pinyin4j.format.HanyuPinyinOutputFormat; import net.sourceforge.pinyin4j.format.HanyuPinyinToneType; import net.sourceforge.pinyin4j.format.HanyuPinyinVCharType; import net.sourceforge.pinyin4j.format.exception.BadHanyuPinyinOutputFormatCombination; import java.util.HashSet; import java.util.Set; /** * Created by yu_longji on 2015/8/31. */ public class Pinyin { public static String makeStringByStringSet(Set<String> stringSet) { StringBuilder str = new StringBuilder(); int i = 0; for (String s : stringSet) { if (i == stringSet.size() - 1) { str.append(s); } else { str.append(s + ","); } i++; } return str.toString().toLowerCase(); } /** * 获取拼音集合 * */ public static Set<String> getPinyin(String src) { if (src != null && !src.trim().equalsIgnoreCase("")) { char[] srcChar; srcChar = src.toCharArray(); //汉语拼音格式输出类 HanyuPinyinOutputFormat hanYuPinOutputFormat = new HanyuPinyinOutputFormat(); //输出设置,大小写,音标方式等 hanYuPinOutputFormat.setCaseType(HanyuPinyinCaseType.UPPERCASE); hanYuPinOutputFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE); hanYuPinOutputFormat.setVCharType(HanyuPinyinVCharType.WITH_U_UNICODE); String[][] temp = new String[src.length()][]; for (int i = 0; i < srcChar.length; i++) { char c = srcChar[i]; //是中文或者a-z或者A-Z转换拼音(我的需求,是保留中文或者a-z或者A-Z) if (String.valueOf(c).matches("[\\u4E00-\\u9FA5]+")) { try { temp[i] = PinyinHelper.toHanyuPinyinStringArray(srcChar[i], hanYuPinOutputFormat); } catch (BadHanyuPinyinOutputFormatCombination e) { e.printStackTrace(); } } else if (((int) c >= 65 && (int) c <= 90) || ((int) c >= 97 && (int) c <= 122)) { temp[i] = new String[]{String.valueOf(srcChar[i])}; } else { temp[i] = new String[]{""}; } } String[] pingyinArray = Exchange(temp); Set<String> pinyinSet = new HashSet<String>(); for (int i = 0; i < pingyinArray.length; i++) { pinyinSet.add(pingyinArray[i]); } return pinyinSet; } return null; } /** * 递归 * */ public static String[] Exchange(String[][] strJaggedArray) { String[][] temp = DoExchange(strJaggedArray); return temp[0]; } /** * 递归 * */ private static String[][] DoExchange(String[][] strJaggedArray) { int len = strJaggedArray.length; if (len >= 2) { int len1 = strJaggedArray[0].length; int len2 = strJaggedArray[1].length; int newlen = len1 * len2; String[] temp = new String[newlen]; int Index = 0; for (int i = 0; i < len1; i++) { for (int j = 0; j < len2; j++) { temp[Index] = strJaggedArray[0][i] + strJaggedArray[1][j]; Index++; } } String[][] newArray = new String[len - 1][]; for (int i = 2; i < len; i++) { newArray[i - 1] = strJaggedArray[i]; } newArray[0] = temp; return DoExchange(newArray); } else { return strJaggedArray; } } }</span>
MainActivity.java
<span style="font-family:KaiTi_GB2312;font-size:18px;">package com.example.yu_longji.android29; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.widget.EditText; import android.widget.TextView; public class MainActivity extends Activity { TextView tv; EditText et; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); tv = (TextView)findViewById(R.id.tv); et = (EditText)findViewById(R.id.et); } public void click(View view){ String str = et.getText().toString().trim(); tv.setText(Pinyin.makeStringByStringSet(Pinyin.getPinyin(str))); } } </span>
相关文章推荐
- 用PS实现纹理浮雕效果代码
- 用vbs实现cmd功能的代码
- 用双网卡实现三机互联
- C#中实现判断某个类是否实现了某个接口
- DL.DT.DD实现左右的布局简单例子第1/2页
- 用PHP实现文件上传
- 无限级别菜单的实现
- 留言板翻页的实现详解
- WinForm中的登录实现
- 基于jQuery.Hz2Py.js插件实现的汉字转拼音特效
- ibatis简单实现与配置
- jsp实现购物程序
- MySQL 查询结果取交集的实现方法
- 探讨:用两个栈实现一个队列(我作为面试官的小结)
- 文件上传的实现
- 实现“上一页”和“下一页按钮
- javascript 汉字转拼音实现代码
- 基于C语言实现的扫雷游戏代码
- 基于C语言实现的迷宫游戏代码
- 图文演示Flash+ASP实现用户登录/注册程序第1/2页