android 개발의pinyin4j 기본 사용법

8256 단어 pinyin4j
1. 간단한 소개
데이터 처리를 편리하게 하기 위해 한자를 대응하는 병음으로 프로그래밍해야 할 때가 있다.예를 들어 안드로이드 휴대전화 앱의 개발에서 연락처의 이름을 조회하려면 보통 병음으로 조회한다.예를 들어'조맹덕'을 조회하려면'cmd', 즉'조맹덕'세 한자의 병음'caomengde'각 글자의 자모를 입력할 수 있다.그러나 어떻게 해야만'조맹덕'을'caomengde'로 번역할 수 있습니까?아주 간단한 방법은 큰 대조표(예를 들어 관련 용기 맵을 사용)를 만드는 것이다. 예를 들어'조','cao','맹','meng','덕','de'등이다. 그러나 이런 방법은 비교적 큰 대조표를 잘 유지해야 한다. 동시에 한자 하나에 여러 발음을 할 수 있다. 즉, 맵과 같은 용기는 안 된다. 왜냐하면 <키,value > 일일이 대응해야 합니다.C++에서는 STL에 있는 멀티맵으로 이 문제를 해결할 수 있지만 자바에는 멀티맵과 같은 것이 없습니다. 자기가 하나를 실현하지 않으면.
Pinyin4j는 이와 같은 문제를 해결하기 위한 것이다.그것은sourceforge입니다.net의 오픈 소스 프로젝트로 매우 강력합니다.
  • 같은 한자에 여러 발음 지원
  • 병음의 포맷 출력도 지원한다. 예를 들어 몇 번째 소리 같은 것도 지원한다
  • 간체 중국어, 번체 중국어를 병음으로 변환하는 것을 동시에 지원합니다... 사용하기에도 매우 간단합니다.다음은 다운로드가 가능한 공식 웹 주소입니다.http://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

    좋은 웹페이지 즐겨찾기