android 개발의pinyin4j 기본 사용법
8256 단어 pinyin4j
데이터 처리를 편리하게 하기 위해 한자를 대응하는 병음으로 프로그래밍해야 할 때가 있다.예를 들어 안드로이드 휴대전화 앱의 개발에서 연락처의 이름을 조회하려면 보통 병음으로 조회한다.예를 들어'조맹덕'을 조회하려면'cmd', 즉'조맹덕'세 한자의 병음'caomengde'각 글자의 자모를 입력할 수 있다.그러나 어떻게 해야만'조맹덕'을'caomengde'로 번역할 수 있습니까?아주 간단한 방법은 큰 대조표(예를 들어 관련 용기 맵을 사용)를 만드는 것이다. 예를 들어'조','cao','맹','meng','덕','de'등이다. 그러나 이런 방법은 비교적 큰 대조표를 잘 유지해야 한다. 동시에 한자 하나에 여러 발음을 할 수 있다. 즉, 맵과 같은 용기는 안 된다. 왜냐하면 <키,value > 일일이 대응해야 합니다.C++에서는 STL에 있는 멀티맵으로 이 문제를 해결할 수 있지만 자바에는 멀티맵과 같은 것이 없습니다. 자기가 하나를 실현하지 않으면.
Pinyin4j는 이와 같은 문제를 해결하기 위한 것이다.그것은sourceforge입니다.net의 오픈 소스 프로젝트로 매우 강력합니다.
2. 기본 사용법:
일반적인 경우 PinyinHelper 클래스의 정적 방법인 toHanyuPinyinStringArray만 사용하면 됩니다. 예를 들어 다음과 같습니다.
/** * */
//' ' dan1 chan2 shan4
String[] pinyinArray = PinyinHelper.toHanyuPinyinStringArray(' ');
for(int i = 0;i < pinyinArray.length;i++) {
System.out.println(pinyinArray[i]);
}
이 세 가지 발음은 뒤의 숫자가 몇 번을 대표한다.정적 방법인 ToHanyu Pin String Array가 되돌아오는 데이터 형식은 하나의 한자의 여러 발음을 받아들이는 데 사용되며, ToHanyu Pin String Array의 매개 변수가 한자가 아니라면,null로 되돌아옵니다.
3. 형식 지원
Pinyin4j는 병음 출력의 포맷을 지원한다. 예를 들어'노랑'은'huang','huang2','huáng'등으로 출력할 수 있다. 다음 코드는'huáng'을 출력하는 예이다.
HanyuPinyinOutputFormat format = new HanyuPinyinOutputFormat();
format.setToneType(HanyuPinyinToneType.WITH_TONE_MARK);
format.setVCharType(HanyuPinyinVCharType.WITH_U_UNICODE);
String[] pinyinArray1 = null;
try { pinyinArray1 = PinyinHelper.toHanyuPinyinStringArray(' ',format); } catch (BadHanyuPinyinOutputFormatCombination badHanyuPinyinOutputFormatCombination) { badHanyuPinyinOutputFormatCombination.printStackTrace(); }
for (int i = 0; i < pinyinArray1.length; i++) { System.out.println(pinyinArray1[i]); }
또한 대/소문자 변환, ü 등도 지원합니다!자세한 내용은 Pinyin4j 자체 문서를 볼 수 있습니다.
4. 실제 샘플 코드
만약 우리가 한 단락의 문자 중의 한자를 모두 음조가 없는 병음 출력으로 바꾸려고 한다면, 이 단락의 문자에는 아랍 숫자, 영어, 문장부호 등이 포함될 수도 있다.만약 완전히 자신이 코드를 써서 변환을 진행한다면 그것은 매우 번거로운 것이다. 그 중 하나는 먼저 구별해야 한다. 이 단락의 문자는 한자이고 저것들은 비한자이다.Pinyin4j가 있으면 이 문제는 더 이상 어렵지 않다. 왜냐하면 비한자에 대해 Pinyin4j는 자동으로 null을 출력하기 때문이다.다음 예제 코드를 참조하십시오.
/** * Created by ZaneLove on 2015/3/10. */
public class PinYinUtil {
private HanyuPinyinOutputFormat format = null;
private String[] pinyin;
public PinYinUtil() {
format = new HanyuPinyinOutputFormat();
format.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
pinyin = null;
}
/** * * @param c * @return */
public String getCharacterPinYin(char c) {
try {
pinyin = PinyinHelper.toHanyuPinyinStringArray(c, format);
}catch(BadHanyuPinyinOutputFormatCombination e){
e.printStackTrace();
}
// c ,toHanyuPinyinStringArray null
if(pinyin == null) return null;
// , ,
return pinyin[0];
}
/** * * @param str * @return */
public String getStringPinYin(String str) {
StringBuilder sb = new StringBuilder();
String tempPinyin = null;
for(int i = 0; i < str.length(); ++i) {
tempPinyin =getCharacterPinYin(str.charAt(i));
if(tempPinyin == null) {
// str.charAt(i) ,
sb.append(str.charAt(i));
}else {
sb.append(tempPinyin);
}
}
return sb.toString();
}
/** * * @param str * @return String */
public String getPinYinHeadChar(String str) {
String convert = "";
for (int j = 0; j < str.length(); j++) {
char word = str.charAt(j);
//
String[] pinyinArray = PinyinHelper.toHanyuPinyinStringArray(word);
if (pinyinArray != null) {
convert += String.valueOf(pinyinArray[0].charAt(0)).toUpperCase();
} else {
convert += String.valueOf(word).toUpperCase();
}
}
return convert;
}
/** * ASCII * @param cnStr * @return String */
public String getCnASCII(String cnStr) {
StringBuffer strBuf = new StringBuffer();
//
byte[] bGBK = cnStr.getBytes();
for (int i = 0; i < bGBK.length; i++) {
// ASCII
strBuf.append(Integer.toHexString(bGBK[i] & 0xff));
}
return strBuf.toString();
}
}
샘플 코드 스탬프 Here
면책 성명: 전재http://blog.csdn.net/pathuang68/article/details/6692882