javaSE及android汉字求索引【还有iphone汉字求拼音(求了拼音索引也就好了)】.doc_第1页
javaSE及android汉字求索引【还有iphone汉字求拼音(求了拼音索引也就好了)】.doc_第2页
javaSE及android汉字求索引【还有iphone汉字求拼音(求了拼音索引也就好了)】.doc_第3页
javaSE及android汉字求索引【还有iphone汉字求拼音(求了拼音索引也就好了)】.doc_第4页
javaSE及android汉字求索引【还有iphone汉字求拼音(求了拼音索引也就好了)】.doc_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

GB 2312-80 把收录的汉字分成两级。第一级汉字是常用汉字,计 3755 个,置于 1655 区,按汉语拼音字母笔形顺序排列;第二级汉字是次常用汉字, 计 3008 个,置于 5687 区,按部首笔画顺序排列,所以本程序只能查到对一级汉字的声母。同时对符合声母(zh,ch,sh)只能取首字母(z,c,s)如果是return buffer.toString()则可以返回一句话中每个字的拼音索引Java的这段代码与android的那段代码所用的思想是一样的,但是java的这段代码只能用于J2SE中要想在android中使用的话还得用android的那段,如果是做iphone开发的话同样可以用(我自己试过但是没成功,主要是编码不合适,如果你有技术的话可以自己试着转换下编码)。另外还有一部分内容是网上找来的关于iphone汉字求拼音的代码,由于它用的是C#语言,所用我看不懂。如果有开发iphone的兄弟的话可以下来看看。废话不多说了,我们来看看代码吧。JAVA_SE专用部分:public class HzPyUtil / 国标码和区位码转换常量static final int GB_SP_DIFF = 160;/ 存放国标一级汉字不同读音的起始区位码static final int 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 ;/ 存放国标一级汉字不同读音的起始区位码对应读音static final char firstLetter = a, b, c, d, e, f, g, h,j, k, l, m, n, o, p, q, r, s, t, w, x,y, z ;/ 获取一个字符串的拼音码public static String getFirstLetter(String oriStr) String str = oriStr.toLowerCase();StringBuffer buffer = new StringBuffer();char ch;char temp;for (int i = 0; i str.length(); i+) / 依次处理str中每个字符ch = str.charAt(i);temp = new char ch ;byte uniCode = new String(temp).getBytes();if (uniCode0 0) / 非汉字buffer.append(temp); else buffer.append(convert(uniCode);return buffer.toString();/* * 获取一个汉字的拼音首字母。 GB码两个字节分别减去160,转换成10进制码组合就可以得到区位码 * 例如汉字“你”的GB码是0xC4/0xE3,分别减去0xA0(160)就是0x24/0x43 * 0x24转成10进制就是36,0x43是67,那么它的区位码就是3667,在对照表中读音为n */static char convert(byte bytes) char result = -;int secPosvalue = 0;int i;for (i = 0; i bytes.length; i+) bytesi -= GB_SP_DIFF;secPosvalue = bytes0 * 100 + bytes1;for (i = 0; i = secPosvalueListi& secPosvalue = a & ch = A & ch = Z)return ch;int gb = gbValue(ch);if (gb table0)return *;for (int i = 0; i = 26) return *; else return alphatablei;return *;/* * 根据一个包含汉字的字符串返回一个汉字拼音首字母的字符串 */public static String String2Alpha(String str) String Result = ;try for (int i = 0; i str.length(); i+) Result += Char2Alpha(str.charAt(i); catch (Exception e) Result = ;return Result;private static boolean match(int i, int gb) if (gb tablei)return false;int j = i + 1;/ 字母Z使用了两个标签while (j 26 & (tablej = tablei)+j;if (j = 26)return gb = tablej;elsereturn gb tablej;/* * 取出传入汉字的编码 */private static int gbValue(char ch) String str = new String();str += ch;try byte bytes = str.getBytes(GB2312);if (bytes.length 2)return 0;return (bytes0 8 & 0xff00) + (bytes1 & 0xff); catch (Exception e) return *;Iphone专用“汉字求拼音”部分代码及相关解释:iphone开发获取汉字拼音:最近做iphone项目,需要做通讯录,地名按拼音排序,在网上搜索n多资料寻找解决方案,综合多方资料,最终形成如下方案: 所需工具:一个拼音表(如需要,自己找找),过程: 1、对拼音表排序,得到一个包含“十六进制编码 拼音”格式的单元的按汉字十六进制编码排序的数组/*汉字转16进制*/- (NSString *) Chinese_To_Hex:(NSString *)ChineseStr/中英文数字参杂在一起也可以转换NSMutableString * ret = NSMutableString alloc init;NSInteger length = ChineseStr length;for (NSInteger i =0; i length; i+) ret appendFormat:%x, ChineseStr characterAtIndex:i;return ret autorelease;/*汉字转16进制*/- (void) testConvert/*NSString * strChinese = 中国共浐党万岁;/4e2d 56fd 5171 6d50 515a 4e07 5c81NSString * strTemp = self Chinese_To_Hex:strChinese;/Chinese_To_Hex()此函数转的是GB码NSLog(%, strTemp);*/self getPinyinBiao;-(void) getPinyinBiaoNSString *tmp;NSArray *lines; /*将文件转化为一行一行的*/NSString * path = NSBundle mainBundle pathForResource:tn_pinyin ofType:nil;NSString * content = NSString alloc initWithContentsOfFile:path;lines = content componentsSeparatedByString:n;content release;NSEnumerator *nse = lines objectEnumerator;/ 读取里的内容NSMutableDictionary * pinyinDict = NSMutableDictionary alloc init autorelease;while(tmp = nse nextObject) if (tmp & !tmp isEqual:NSNull null) NSLog(%, tmp);NSArray * tmpArr = tmp componentsSeparatedByString: ;if (tmpArr count 1) pinyinDict setValue:tmpArr objectAtIndex:0 forKey:tmp;/lines release;NSArray * keyValuePairSortedByValue = pinyinDict keysSortedByValueUsingSelector:selector(compare:);NSString * savePath = NSHomeDirectory() stringByAppendingPathComponent:tmp/pinyin.plist;NSLog(- savepath: %, savePath);keyValuePairSortedByValue writeToFile:savePath atomically:YES;NSLog(done);2、二叉数算法获取汉字拼音:(做成了NSString的扩展, 要获取拼音,使用str hanziToPinYin)implementation NSString (md5)- (NSString *) md5const char *cStr = self UTF8String;unsigned char result16;CC_MD5( cStr, strlen(cStr), result ); / This is the md5 callreturn NSString stringWithFormat:%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x,result0, result1, result2, result3,result4, result5, result6, result7,result8, result9, result10, result11,result12, result13, result14, result15;-(NSComparisonResult)pinYinCompare:(NSString *)otherNSString * myPinyin = self hanziToPinYin;NSString * otherPinyin = other hanziToPinYin;/TNLog(pinyin : % - %, % - %, self, myPinyin, other, otherPinyin);return myPinyin compare:otherPinyin;- (NSString *) hanziToPinYinNSString * pinyin = nil;NSAutoreleasePool * pool1 = NSAutoreleasePool alloc init;NSMutableString * mStr = NSMutableString alloc init;for (NSInteger i = 0; i 0) pinyin = mStr retain;else pinyin = self retain;mStr release;pool1 release;return pinyin autorelease;- (NSString *) getPinYinOfSingleHanziif (self characterAtIndex:0 128) /return self;NSString * returnString = nil;NSArray * hanziToPinyin = Func getPinyinList retain;/URLEncode/NSString *encodeStr = (NSString *) CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault, (CFStringRef)self, NULL, NULL, kCFStringEncodingGB_18030_2000);/Hex(GB)NSString * lowerCaseEncode = NSString alloc initWithFormat:%x, self characterAtIndex:0;NSString * encodeStr = lowerCaseEncode uppercaseString;lowerCaseEncode release;/TNLog(- pinyin for : %, encodestring: %, self, encodeStr);NSInteger low = 0;NSInteger high = hanziToPinyin count - 1;NSInteger middle = 0;domiddle = (int)(low + high)/2;NSString * keyValuePair = hanziToPinyin objectAtIndex:middl

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论