Android Studio 漢字轉拼音
阿新 • • 發佈:2019-02-16
今天上課的時候老師講到了漢字轉拼音的問題,感覺挺有意思的,就自己搗鼓了一下。
查閱了一些資料,發現java獲取漢字的拼音,pinyin4j.jar這個庫可以很好的解決此類問題,先是用Myeclipse10做的,因為最近在學習android開發的內容,所以想把它做成一個簡單的app。
接下來運用android studio來建立一個新的專案,在這裡,我的專案名字叫PinYinHelper。
我們來實現一個簡單activity_main.xml佈局,程式碼如下:
<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:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="輸入漢字:" android:textSize="25dp" android:id="@+id/textView" android:layout_alignParentTop="true" android:layout_alignParentLeft="true"android:layout_alignParentStart="true" android:layout_marginTop="115dp" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="轉化" android:id="@+id/Change" android:layout_above="@+id/textView3" android:layout_alignParentRight="true" android:layout_alignParentEnd="true" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="轉化結果:" android:textSize="25dp" android:id="@+id/textView3" android:layout_centerVertical="true" android:layout_alignParentLeft="true" android:layout_alignParentStart="true" /> <EditText android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/Chinese" android:layout_alignTop="@+id/textView" android:layout_toRightOf="@+id/textView" android:layout_alignParentRight="true" android:layout_alignParentEnd="true" /> <EditText android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/PinYin" android:layout_alignTop="@+id/textView3" android:layout_toRightOf="@+id/textView3" android:layout_alignParentRight="true" android:layout_alignParentEnd="true" /> </RelativeLayout>
然後是實現MainActivity,程式碼如下:
package com.ljh.pinyinhelper; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.widget.Button; import android.widget.EditText; 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.exception.BadHanyuPinyinOutputFormatCombination; public class MainActivity extends AppCompatActivity { public static String converterToFirstSpell(String chines){ String pinyinName = ""; char[] nameChar = chines.toCharArray(); HanyuPinyinOutputFormat defaultFormat = new HanyuPinyinOutputFormat(); defaultFormat.setCaseType(HanyuPinyinCaseType.LOWERCASE); defaultFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE); for (int i = 0; i < nameChar.length; i++) { if (nameChar[i] > 128) { try { pinyinName += PinyinHelper.toHanyuPinyinStringArray(nameChar[i], defaultFormat)[0].charAt(0); } catch (BadHanyuPinyinOutputFormatCombination e) { e.printStackTrace(); } }else{ pinyinName += nameChar[i]; } } return pinyinName; } /** * 漢字轉換位漢語拼音,英文字元不變 * @param chines 漢字 * @return 拼音 */ public static String converterToSpell(String chines){ String pinyinName = ""; char[] nameChar = chines.toCharArray(); HanyuPinyinOutputFormat defaultFormat = new HanyuPinyinOutputFormat(); defaultFormat.setCaseType(HanyuPinyinCaseType.LOWERCASE); defaultFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE); for (int i = 0; i < nameChar.length; i++) { if (nameChar[i] > 128) { try { pinyinName += PinyinHelper.toHanyuPinyinStringArray(nameChar[i], defaultFormat)[0]; } catch (BadHanyuPinyinOutputFormatCombination e) { e.printStackTrace(); } }else{ pinyinName += nameChar[i]; } } return pinyinName; } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Button change = (Button)findViewById(R.id.Change); change.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { EditText editTextchinese = (EditText)findViewById(R.id.Chinese); EditText editTextpinyin = (EditText)findViewById(R.id.PinYin); String text = editTextchinese.getText().toString(); String chinese = converterToSpell(text); editTextpinyin.setText(chinese); } }); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.menu_main, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { // Handle action bar item clicks here. The action bar will // automatically handle clicks on the Home/Up button, so long // as you specify a parent activity in AndroidManifest.xml. int id = item.getItemId(); //noinspection SimplifiableIfStatement if (id == R.id.action_settings) { return true; } return super.onOptionsItemSelected(item); } }
效果圖:
基本思路:建立兩個EditText控制元件,一個是供使用者輸入想要轉化為拼音的漢字的,另外一個是顯示拼音的框。在這裡,我們先獲取第一個EditText裡面使用者輸入的漢字,然後通過一個按鈕控制把漢字轉化為拼音。
是不是很簡單呢?其實不然,這還只是剛剛入門而已,想要完全瞭解其中的精髓,還得去看jar包裡的具體程式碼~