1. 程式人生 > >java實現漢字轉拼音

java實現漢字轉拼音

轉載請註明出處:http://blog.csdn.net/xiaojimanman/article/details/48579073
個人部落格站已經上線了,網址 www.llwjy.com ~歡迎各位吐槽~

-------------------------------------------------------------------------------------------------

一、問題描述

      漢字轉化為對應的拼音或者獲取漢字拼音的首字母,這些都是在開發中經常遇到的問題,在獲取漢字的拼音或者拼音的首字母之後,我們在推薦或者搜尋部門可以很大程度提高使用者的體驗,比如使用者輸入“NH”,我們就可以聯想出“你好”、“你會”、“年後”、“內涵”等詞語。在Java中,pinyin4j.jar這個工具很好實現了將漢字轉化為對應的拼音,下面我們就介紹下如何使用這個jar包。

二、資源下載

      下載地址點選這裡,下載之後解壓,直接使用檔案中的pinyin4j-2.5.0.jar即可。

三、提供方法

      我們可以使用HanyuPinyinOutputFormat類來設定拼音的返回方式,比如設定拼音的大小寫、音標方式以及拼音ü的顯示形式,具體如下圖:

img

      直接使用PinyinHelper中的方法來對漢字做對應的轉化,具體有如下三種,三種效果如何自己做下測試即可:

img

四、編寫程式碼

      針對我們平常可能用到的功能,我做了如下的封裝,提供的功能還有具體的實現步驟參照程式碼中的註釋:

 /**  
 *@Description: 將漢語轉化為拼音    
 */ 
package com.lulei.util;  

import java.util.ArrayList;
import java.util.List;

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;
  
public class PinYinUtil {
	private static HanyuPinyinOutputFormat format = null;
	static {
		format = new HanyuPinyinOutputFormat();
		//拼音小寫
		format.setCaseType(HanyuPinyinCaseType.LOWERCASE);
		//無音標方式;WITH_TONE_NUMBER:1-4數字表示英標;WITH_TONE_MARK:直接用音標符(必須WITH_U_UNICODE否則異常
		format.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
		//用v表示ü
		format.setVCharType(HanyuPinyinVCharType.WITH_V);
	}
	
	/**
	 * @param str
	 * @return
	 * @Author:lulei  
	 * @Description: 返回字串的拼音
	 */
	public static String[] getCharPinYinString(String str) {
		if (str == null || str.length() < 1) {
			return null;
		}
		List<String> result = new ArrayList<String>();
		//對字串中的記錄逐個分析
		for (int i = 0; i < str.length(); i++) {
			result = getCharPinYinString(str.charAt(i), result);
		}
		return result.toArray(new String[result.size()]);
	}
	
	/**
	 * @param c
	 * @param list
	 * @return
	 * @Author:lulei  
	 * @Description: 將字元c的拼音拼接到list中的記錄中
	 */
	private static List<String> getCharPinYinString(char c, List<String> list) {
		String[] strs = getCharPinYinString(c);
		List<String> result = new ArrayList<String>();
		//如果解析出的拼音為空,判斷字元C是否為英文字母,如果是英文字母則新增值拼音結果中
		if (strs == null) {
			if ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z')) {
				c = c <= 91 ? (char)(c + 32) : c;
				if (list == null || list.size() == 0) {
					result.add(c + "");
				} else {
					for (String s : list) {
						result.add(s + c);
					}
				}
				return result;
			}
			return list;
		}
		//將字元C的拼音首和已存在的拼音首組合成新的記錄
		for (String str : strs) {
			if (list == null || list.size() == 0) {
				result.add(str);
			} else {
				for (String s : list) {
					result.add(s + str);
				}
			}
		}
		return result;
	}
	
	/**
	 * @param c
	 * @return
	 * @Author:lulei  
	 * @Description: 返回漢字的拼音
	 */
	public static String[] getCharPinYinString(char c) {
		try {
			//返回字元C的拼音
			return PinyinHelper.toHanyuPinyinStringArray(c, format);
		} catch (Exception e) {
			e.printStackTrace();
		}
		return null;
	}
	
	/**
	 * @param str
	 * @return
	 * @Author:lulei  
	 * @Description: 返回字串的拼音的首字母
	 */
	public static String[] getCharPinYinChar(String str) {
		if (str == null || str.length() < 1) {
			return null;
		}
		List<String> result = new ArrayList<String>();
		//對字串中的記錄逐個分析
		for (int i = 0; i < str.length(); i++) {
			result = getCharPinYinChar(str.charAt(i), result);
		}
		return result.toArray(new String[result.size()]);
	}
	
	/**
	 * @param c
	 * @param list
	 * @return
	 * @Author:lulei  
	 * @Description: 將字元c的拼音首字母拼接到list中的記錄中
	 */
	private static List<String> getCharPinYinChar(char c, List<String> list) {
		char[] chars = getCharPinYinChar(c);
		List<String> result = new ArrayList<String>();
		//如果解析出的拼音為空,判斷字元C是否為英文字母,如果是英文字母則新增值拼音結果中
		if (chars == null) {
			if ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z')) {
				c = c < 91 ? (char)(c + 32) : c;
				if (list == null || list.size() == 0) {
					result.add(c + "");
				} else {
					for (String s : list) {
						result.add(s + c);
					}
				}
				return result;
			}
			return list;
		}
		//將字元C的拼音首字母和已存在的拼音首字母組合成新的記錄
		for (char ch : chars) {
			if (list == null || list.size() == 0) {
				result.add(ch + "");
			} else {
				for (String s : list) {
					result.add(s + ch);
				}
			}
		}
		return result;
	}
	
	/**
	 * @param c
	 * @return
	 * @Author:lulei  
	 * @Description:返回漢字拼音首字母
	 */
	public static char[] getCharPinYinChar(char c) {
		//字元C的拼音
		String[] strs = getCharPinYinString(c);
		if (strs != null) {
			//擷取拼音的首字母
			char[] chars = new char[strs.length];
			for(int i = 0; i <chars.length; i++) {
				chars[i] = strs[i].charAt(0);
			}
			return chars;
		}
		return null;
	}
	
	public static void main(String[] args) {
		// TODO Auto-generated method stub  
		char c = "重慶".charAt(0);
		String[] str = PinYinUtil.getCharPinYinString(c);
		for(String s : str) {
			System.out.println(s);
		}
		
		char[] chars = PinYinUtil.getCharPinYinChar(c);
		for(char c1 : chars) {
			System.out.println(c1);
		}
		
		str = PinYinUtil.getCharPinYinString("重慶c");
		for(String s : str) {
			System.out.println(s);
		}
		
		str = PinYinUtil.getCharPinYinChar("重慶a");
		for(String s : str) {
			System.out.println(s);
		}
	}

}

五、輸出結果


-------------------------------------------------------------------------------------------------
小福利
-------------------------------------------------------------------------------------------------
      個人在極客學院上《Lucene案例開發》課程已經上線了(目前上線到第二課),歡迎大家吐槽~

第五課:小說網站的採集

相關推薦

java實現漢字拼音

轉載請註明出處:http://blog.csdn.net/xiaojimanman/article/details/48579073 個人部落格站已經上線了,網址 www.llwjy.com ~歡迎各位吐槽~---------------------------------

【Python】使用python實現漢字拼音(2018.12更新)

在瀏覽部落格時,偶然看到了用python將漢字轉為拼音的第三方包,但是在實現的過程中發現一些引數已經更新,現在將兩種方法記錄一下。 xpinyin 在一些部落格中看到,如果要轉化成帶音節的拼音,需要傳遞引數,‘show_tone_marks=True’,但我在實際使用時發現,已經

C#實現漢字拼音(包括生僻字)

專案裡面有一個功能是將使用者的名字轉變成拼音全拼,但是在使用過程中,有很多人的名字是生僻字,程式根本找不到那個字的拼音,後來看程式碼才發現,轉拼音這個類居然是將一個個的漢字列舉的: 且不說這樣列舉會增加多大的工作量,光這漢字之多,能列舉的完嗎? 後來看了一些資料並借鑑了前

利用Android原始碼,輕鬆實現漢字拼音功能

 今天和大家分享一個從Android系統原始碼提取出來的漢字轉成拼音實現方案,只要一個類,560多行程式碼就可以讓你輕鬆實現漢字轉成拼音的功能,且無需其他任何第三方依賴。 需求場景 實際開發過程中需要用到實現漢字轉成拼音的場景比較常見,如:通訊錄裡的聯絡人字母導航欄

js實現漢字拼音

將JSPinyin剝離mootools這個JavaScript庫,可以獨立使用。 1)一個是將漢字翻譯為拼音,其中每一個字的首字母大寫; pinyin.getFullChars(this.value); 2)一個是可以將每一個字的拼音的首字母提取出來,是大寫的

Android-實現漢字拼音支援一詞多音

<span style="font-family:KaiTi_GB2312;font-size:18px;"><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools=

python實現漢字拼音和讀寫excel

本文再次見證python是對付雜活的利器。不過,為什麼這麼多雜活呢?最近接到上級的任務,要在網路上收集一大批人圖片,主頁等資訊,然後將這些資訊填入到Excel表格。其中有一個令人髮指地無聊的工作就是要將所有人的英文名寫好整理好,由於都是中國人,因此,這工作也就是在考驗我的漢

VB實現 漢字拼音縮寫的函式

PublicFunction getPYChar(char AsString) AsStringDim lChar AsLong    lChar =65536+Asc(char)    If (lChar >=45217And lChar <=45252) Then getPYChar ="A"

java根據漢字拼音,多音字人工處理,資料庫表字段型別為nvarchar,其它要亂碼

package com.zsjz.utils.tools; import net.sourceforge.pinyin4j.PinyinHelper; import net.sourceforge.pinyin4j.format.HanyuPinyinCaseType; i

Java實現漢字轉換拼音功能

使用工具類: <dependency> <groupId>com.belerweb</groupId> <artifactId>pinyin4j</artifactId> <versio

簡單測試--C#實現中文漢字拼音首字母

esp chart htm foreach ext ads linq 類庫 play 第一種: 這個是自己寫的比較簡單的實現方法,要做漢字轉拼音首字母,首先應該有一個存儲首字母的數組,然後將要轉拼音碼的漢字與每個首字母開頭的第一個漢字即“最小”的漢字作比較,這裏的最小指的是

Java實現漢字金額轉化(自微信)

ack temp string 額的 rep ger poi 輸出 nec package com.xfonlineclass; import java.text.DecimalFormat; import java.util.Scanner; /** * 金額

Android 實現ListView的A-Z字母排序和過濾搜尋功能,實現漢字拼音

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

java漢字拼音或效驗漢字是否存在(過濾)

# 漢字控制 ## 漢字轉拼音 引入jar:pinyin4j.jar import net.sourceforge.pinyin4j.PinyinHelper; import net.sourceforge.pinyin4j.format.HanyuPiny

漢字拼音的c++實現

目的 在一個專案裡,需要根據輸入的一組漢字來自動生成這組漢字的拼音首字母字串,搜了一下,很多實現方案,記錄下。 平臺 Win10 64bit + VS15 程式碼 void GetFirstLetter(CString sName, CS

Java/Android中漢字拼音的兩種方法,優劣比較

一、前言 在我們的開發中,有時會有這樣的需求,就是聯絡人列表按照拼音順序排列(如通訊錄)。於是,我也在網上搜到了許多這類的文章,就兩種最常見的做法在此進行簡單的比較和分析 二、漢字轉拼音的方法 使用第三方pinyin4j的jar包。 下載地址  , Android St

Android 實現漢字拼音實現ListView的A-Z字母排序,顯現多音字城市排序

今天給大家帶來ListView的A-Z字母排序和過濾搜尋功能並且實現漢字轉成拼音的功能,我們知道一般我們對聯絡人,城市列表等實現A-Z的排序,因為聯絡人和城市列表我們可以直接從資料庫中獲取他的漢字拼音,而對於一般的資料,我們怎麼實現A-Z的排序,我們需要將漢字

java漢字拼音

pinyin-4j demo public class HanzhiToPinyinUtil{ /** * 獲得漢語拼音首字母 * * @param chines 漢字 * @return */ public static

Java漢字拼音工具類

 Java漢字轉拼音的類。使用pinyin4j實現 package com.pinyin4j; import net.sourceforge.pinyin4j.PinyinHelper; import net.sourceforge.pinyin4j.format.Ha

Java漢字拼音pinyin4j用法

漢字轉換拼音在日常開發中是個很常見的問題。例如我們偉大的12306,在地名中輸入“WH”,就會出現“武漢”“蕪湖”“威海”等地名,輸入“WUHU”就會出現“蕪湖”。 Java獲取漢字的拼音,pinyin4j這個庫可以很好的解決這個問題。 下載解壓,裡面有個pinyin4