项目正好用到要获取汉字的拼音码,从网上搜索到的一个工具类。
- packagecom.util;
- importjava.io.UnsupportedEncodingException;
- publicclassPinyinUtil{
- staticfinalintGB_SP_DIFF=160;
- //存放国标一级汉字不同读音的起始区位码
- staticfinalint[]secPosValueList={1601,1637,1833,2078,2274,2302,
- 2433,2594,2787,3106,3212,3472,3635,3722,3730,3858,4027,
- 4086,4390,4558,4684,4925,5249,5600};
- //存放国标一级汉字不同读音的起始区位码对应读音
- staticfinalchar[]firstLetter={'a','b','c','d','e','f','g','h',
- 'j','k','l','m','n','o','p','q','r','s','t','w','x',
- 'y','z'};
- /**
- *获取一个字符串的拼音码
- *@paramoriStr
- *@return
- */
- publicstaticStringgetFirstLetter(StringoriStr){
- Stringstr=oriStr.toLowerCase();
- StringBufferbuffer=newStringBuffer();
- charch;
- char[]temp;
- for(inti=0;i<str.length();i++){//依次处理str中每个字符
- ch=str.charAt(i);
- temp=newchar[]{ch};
- byte[]uniCode=newString(temp).getBytes();
- if(uniCode[0]<128&&uniCode[0]>0){//非汉字
- buffer.append(temp);
- }else{
- buffer.append(convert(uniCode));
- }
- }
- returnbuffer.toString();
- }
- /**
- *获取一个汉字的拼音码
- *@paramch
- *@return
- */
- publicstaticCharactergetFirstLetter(charch){
- //过滤英文字母
- if((ch>='a'&&ch<='z')){
- returnch;
- }elseif(ch>='A'&&ch<='Z'){
- return(char)(ch+32);
- }
- byte[]uniCode=null;
- try{
- uniCode=String.valueOf(ch).getBytes("GBK");
- }catch(UnsupportedEncodingExceptione){
- e.printStackTrace();
- returnnull;
- }
- if(uniCode[0]<128&&uniCode[0]>0){//非汉字
- return'#';
- }else{
- returnconvert(uniCode);
- }
- }
- /**
- *获取一个汉字的拼音首字母。GB码两个字节分别减去160,转换成10进制码组合就可以得到区位码
- *例如汉字“你”的GB码是0xC4/0xE3,分别减去0xA0(160)就是0x24/0x43
- *0x24转成10进制就是36,0x43是67,那么它的区位码就是3667,在对照表中读音为‘n’
- */
- staticcharconvert(byte[]bytes){
- charresult='-';
- intsecPosValue=0;
- inti;
- for(i=0;i<bytes.length;i++){
- bytes[i]-=GB_SP_DIFF;
- }
- secPosValue=bytes[0]*100+bytes[1];
- for(i=0;i<23;i++){
- if(secPosValue>=secPosValueList[i]
- &&secPosValue<secPosValueList[i+1]){
- result=firstLetter[i];
- break;
- }
- }
- returnresult;
- }
- }
注:由于作者不是是谁,所以此文没注名出处!