国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > iOS > 正文

iOS如何獲取漢字(簡體中文)筆畫數詳解

2020-07-26 02:21:25
字體:
來源:轉載
供稿:網友

思路

1、漢字字典庫匹配筆畫數

優點: 實現邏輯簡單,字典庫好擴展

缺點: 內存消耗較大(不過也能承擔)

思路: 這種實現思路是比較簡單的,具體思路是將簡體漢字所有字都窮舉出來,然后分別匹配上指定的筆畫數,當做一個大的數據庫,每次都去查詢一下。

2、漢字GBK編碼匹配筆畫數

優點:相比字典庫匹配,效率高,速度快

缺點:添加編碼庫不好添加,不好擴展

思路: 這種實現方案是需要獲取GBK編碼分別對應的筆畫數,放到指定數組(數據庫)中,每次通過輸入的漢字 轉碼為二進制,通過二進制的值 匹配數據庫中的筆畫數。

-**************************廢話少說,盤它!-**************************

上代碼,盤它!

先來看下成果

** 測試代碼 **

dispatch_async(dispatch_get_global_queue(0, 0), ^{ // 處理耗時操作的代碼塊... NSString *testString = @"濃睡不消殘酒"; // 字典查詢匹配 [self testStrokeCount:testString]; // 編碼查詢匹配 [self chineseCharactersCount:testString]; });

** 測試結果 **

------- 字典查詢匹配TemplateApp[78833:3000133] 漢字:濃 ------ 筆畫數:9TemplateApp[78833:3000133] 漢字:睡 ------ 筆畫數:13TemplateApp[78833:3000133] 漢字:不 ------ 筆畫數:4TemplateApp[78833:3000133] 漢字:消 ------ 筆畫數:10TemplateApp[78833:3000133] 漢字:殘 ------ 筆畫數:9TemplateApp[78833:3000133] 漢字:酒 ------ 筆畫數:10------ 編碼查詢匹配TemplateApp[78833:3000133] 漢字:濃 ------ 筆畫數:9TemplateApp[78833:3000133] 漢字:睡 ------ 筆畫數:13TemplateApp[78833:3000133] 漢字:不 ------ 筆畫數:4TemplateApp[78833:3000133] 漢字:消 ------ 筆畫數:10TemplateApp[78833:3000133] 漢字:殘 ------ 筆畫數:9TemplateApp[78833:3000133] 漢字:酒 ------ 筆畫數:10

漢字字典庫匹配筆畫數 核心代碼

-(NSDictionary *)chineseCharacters{ if (!_chineseCharacters) { _chineseCharacters = [[NSDictionary alloc] init]; _chineseCharacters = [self readLocalJsonFileWithName:@"Chinese" type:@"json"]; } return _chineseCharacters;}- (NSArray *)bytesArray{ if (!_bytesArray) { _bytesArray = [[NSArray alloc] init]; _bytesArray = [self readLocalJsonFileWithName:@"byteNum" type:@"json"]; } return _bytesArray;}#pragma mark - **************** Tool function/** 讀取本地文件 */-(nullable id)readLocalJsonFileWithName:(NSString *)fileName type:(NSString *)type{ // 獲取文件路徑 NSString *path = [[NSBundle mainBundle] pathForResource:fileName ofType:type]; // 將文件數據化 NSData *data = [[NSData alloc] initWithContentsOfFile:path]; // 對數據進行JSON格式化并返回字典形式 return [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:nil];}+(BOOL)isAllCCString:(NSString *)tempStr{ for (int i=0; i<tempStr.length; i++) { NSString *indexstr = [tempStr substringWithRange:NSMakeRange(i, 1)]; NSInteger strlength = [KLChineseCharactersTool getCharactCountOfString:indexstr]; if (strlength != 2) {  return NO; }  } return YES;}-(BOOL)isBlankString:(NSString *)string{  if (string ==nil || string ==NULL) { return YES; } if ([string isKindOfClass:[NSNull class]]) { return YES; } if ([[string stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]]length]==0) {//特殊字符判斷 return YES; } return NO;}-(NSInteger)getSigleChineseStrokeCountWith:(NSString *)str{ NSInteger count = 0;  BOOL isALLCC = [[self class] isAllCCString:str]; if (!isALLCC) { // 如果不是純漢字返回筆畫數為0 return 0; }  // 單字符判斷 if (str.length<=0) { NSLog(@"字符串不合法"); return 0; }  // 多字符 取第一個字符判斷 NSString *sigleStr = @""; if (str.length > 1) { NSLog(@"并非單個字符"); sigleStr = [str substringWithRange:NSMakeRange(0, 1)]; }  if (str.length == 1) { sigleStr = str; }   // 獲取筆劃列表 NSDictionary *chineseDic = self.chineseCharacters;  // 查詢 for (int i=0; i<25; i++) { // 按次序獲取某個筆劃數的所有漢字組成的字符 NSString *itemString = [chineseDic objectForKey:[NSString stringWithFormat:@"%d",(i+1)]]; //如果 傳入漢字不為空 異常判斷 if (![self isBlankString:itemString] && itemString.length > 0 ) {  // 包含這個漢字 將筆畫數 i+1 返回  if ([itemString rangeOfString:sigleStr].location != NSNotFound) {  NSLog(@"漢字:%@ ------ 筆畫數:%d",sigleStr,i+1);  count = count + (i+1);  break;  } }  }  if (count == 0) { NSLog(@"字庫中暫時沒有該漢字"); }  return count;}-(NSInteger)getChineseStrokeCountWith:(NSString *)chineseString{ NSInteger count = 0;  // 單個漢字? if (chineseString.length == 1 ) { return [self getSigleChineseStrokeCountWith:chineseString]; }  // 多漢字 // 獲取筆劃列表  for (int i=0; i<chineseString.length; i++) { // 將傳入字符分割成單個字 NSString *indexStr = [chineseString substringWithRange:NSMakeRange(i, 1)]; NSInteger sigleCount = [self getSigleChineseStrokeCountWith:indexStr]; count = count + sigleCount; }  NSLog(@"%@ --- 共計:%ld劃",chineseString ,(long)count);  return count;}

GBK編碼查詢法 核心代碼

#pragma mark - **************** BGBK漢字編碼 匹配+(int)getCharactCountOfString:(NSString *)strtemp{  int strlength = 0; char* p = (char*)[strtemp cStringUsingEncoding:NSUnicodeStringEncoding]; for (int i=0 ; i<[strtemp lengthOfBytesUsingEncoding:NSUnicodeStringEncoding] ;i++) { if (*p) {  p++;  strlength++; } else {  p++; }  } return strlength;}-(NSInteger)getStrokeCountWithHighByte:(int)highByte lowByte:(int)lowByte{ NSInteger strokeCount = 0; //high: 176 - 247 low: 161 - 154 該范圍才是漢子區域 if (highByte < 0xB0 || highByte > 0xF7 || lowByte < 0xA1 || lowByte > 0xFE) { // 非GB2312合法字符 return 0; }else{ int offset = (highByte - 0xB0) * (0xFE - 0xA0) + (lowByte - 0xA1); NSArray *byteArr = self.bytesArray; strokeCount = ((NSNumber *)[byteArr objectAtIndex:offset]).intValue; return strokeCount; } return strokeCount;}-(NSInteger)getBytesChineseStrokeCountWith:(NSString *)ccString{ NSInteger count = 0;  // 單個漢字? if (ccString.length == 1 ) { return [self getBytesSigleChineseStrokeCountWith:ccString]; }  for (int i=0; i<ccString.length; i++) {  NSString *indexstr = [ccString substringWithRange:NSMakeRange(i, 1)];  NSInteger strlength = [KLChineseCharactersTool getCharactCountOfString:indexstr];  if (strlength!=2) {  NSLog(@"kael -- 字符 不合法 %@",indexstr);  break; }  if (strlength == 2) {  count = count + [self getBytesSigleChineseStrokeCountWith:indexstr]; }   }  return count;}-(NSInteger)getBytesSigleChineseStrokeCountWith:(NSString *)ccString{ NSInteger count = 0; // 1、先判斷是否是漢字 BOOL isALLCC = [[self class] isAllCCString:ccString]; if (!isALLCC) { // 如果不是純漢字返回筆畫數為0 return 0; }  // 2、判斷字符個數 // 不合法 if (ccString.length<=0) { NSLog(@"字符串不合法"); return 0; }  // 多字符 取第一個字符判斷 NSString *sigleStr = @""; if (ccString.length > 1) { NSLog(@"并非單個字符"); sigleStr = [ccString substringWithRange:NSMakeRange(0, 1)]; }  // 單字符判斷 if (ccString.length == 1) { sigleStr = ccString; }   NSInteger strlength = [KLChineseCharactersTool getCharactCountOfString:sigleStr];  if (strlength!=2) { NSLog(@"kael -- 字符 不合法 %@",ccString); return 0; }else{ // BGK 編碼 --> 轉為 NSData NSStringEncoding enc =CFStringConvertEncodingToNSStringEncoding(kCFStringEncodingGB_18030_2000); NSData *indexData = [ccString dataUsingEncoding:enc]; // NSData --> Bytes Byte *indexByte = (Byte *)[indexData bytes]; // 取高8位 低8位 int highByte = indexByte[0]; int lowByte = indexByte[1];  count = [self getStrokeCountWithHighByte:highByte lowByte:lowByte]; NSLog(@"漢字:%@ ------ 筆畫數:%ld",sigleStr,count);  }  return count;}

核心數據 及 【文件】

漢字字典庫匹配字典

{"1":"一乙", "2":"丁七乃乜九了二人亻兒入八冂幾凵刀刁力勹匕十廠厶又", "3":"萬丈三上下丌個丫丸久乇么義乞也習鄉亍于虧亡億兀凡刃勺千衛叉口囗土士夕大女子孑孓寸小尢尸山巛川工己已巳巾干幺廣廾弋弓才門飛馬", "4":"不與丐丑專中豐丹為之烏書予云互亓五井亢什仁仂仃仄僅仆仇仉今介仍從侖倉允元公六兮內岡冗鳳兇分切刈勸辦勾勿勻化匹區卅升午卞厄廳歷及友雙反壬天太夫夭孔少尤尹尺屯巴幣幻廿開引心憶戈戶手扎支攴攵文斗斤方無日曰月木欠止歹殳毋比毛氏氣水火爪父爻爿片牙牛犬王瓦肀藝見計訂訃認譏貝車鄧長閂隊韋風且丕世丘丙業叢東絲主乍乎乏", "5":"樂仔仕他仗付仙仝仞仟仡代令以仨儀仫們兄蘭冉冊寫冬馮凸凹出擊刊芻功加務勱包匆北匝卉半卟占卡盧卮卯厲去發古句另叨叩只叫召叭叮可臺叱史右叵葉號司嘆叻叼嘰囚四圣處外央夯失頭奴奶孕寧它宄對爾尕尻尼左巧巨市布帥平幼庀弁弗弘歸必忉戊戔撲扒打扔斥旦舊未末本札術正母氐民氕永汀汁匯漢滅犯犰玄玉瓜甘生用甩田由甲申電疋白皮皿目矛矢石示禮禾穴立糾艽艾艿節訐訌討讓訕訖訓議訊記軋邊遼邗邙邛鄺钅閃阡阢饑馭鳥龍", "6":"丞丟乒乓喬乩買爭亙亞交亥亦產仰仲仳仵件價任份仿企伉伊伍伎伏伐休眾優伙會傴傘偉傳伢傷倀倫傖偽佇佤充兆先光全共關興再軍農冰冱沖決鳧凼刎刑劃刖列劉則剛創劣動匈匠匡華協印危壓厭厙吁吃各吆合吉吊同名后吏吐向吒嚇呂吖嗎囝回囟因囡團在圩圪圬圭圮圯地圳壙場圾壯夙多夷夸夾奪夼奸她好妁如妃妄妝婦媽字存孫宅宇守安寺尋導尖塵尥堯盡屹屺嶼歲豈岌州巡鞏帆師年并莊慶延廷異式弛當懺忖忙戌戍戎戲成托扛扣扦執擴捫掃揚收旨早旬旭旮旯曲曳有朱樸朵機朽殺雜權次歡此死畢氖氘氽汆汊汐汔汕汗汛汜汝江池污湯汲燈灰爺牝牟犴獷犸玎璣百祁竹米糸紆紅紂纖紇約級紈纊紀紉缶網羊羽老考而耒耳聿肉肋肌臣自至臼舌舛舟艮色芄芊芋芍芎芏芑芒薌芝芨虍蟲血行衣西觀講諱謳詎訝訥許訛論訟諷設訪訣貞負軌達遷迂迄迅過邁邡邢那邦邪鄔釓釔閆閉問闖阪阮阱防陽陰陣階頁餳馱馴馳齊", "7":"兩嚴串麗亂亨畝伯估伲伴伶伸伺似伽佃但位低住佐佑體何佗佘余佚佛作佝佞佟你傭僉佧克免兌兕兵況冶冷凍初刪判刨利別剄助努劫劬劭勵勁勞匣醫卣鹵即卻卵縣君吝吞吟吠吡吣否吧噸吩含聽吭吮啟吱吲吳吵吸吹吻吼吾呀呃呆呈告呋吶嘸囈呔嘔嚦唄員咼嗆嗚囤囫園困囪圍圇圻址坂均坊坌坍坎壞坐坑塊堅壇壢壩塢墳墜聲殼奩奐妊妍妒妓妖妗妙妞妣妤妥妨嫵嫗媯姊姒孚孛孜孝宋完宏壽尬尾尿局屁層岈岍岐岑岔嶇崗峴岙嵐島岜希幃帳庇床庋序廬廡庫應棄弄弟張形彤彷役徹忌忍忐忑忒志忘忡忤憂忪快忭忮忱忸忻愾懷憮慪悵愴我戒扭扮扯擾扳扶批扼找技抄抉把抑抒抓投抖抗折撫拋摶摳掄搶護報拒擬攸改攻旰旱時曠更桿杈杉杌李杏材村杓杖杜杞束杠條來楊榪極歟步殲每氙氚求汞汨汩汪汰汴汶洶汽汾沁沂沃沅沆沈沉沌沏沐沔沙沛溝沒灃漚瀝淪滄溈滬泐泛靈灶灸灼災燦煬牡牢狀猶狁狂狃狄狽玖瑪甫甬男甸町疔癤療皂盯矣磯社祀秀私禿究窮系緯紜純紕紗綱納縱綸紛紙紋紡紐紓罕羌肓肖肘肚肛肜肝肟腸良羋芘芙蕪芟芡芤芥蘆芩芪芫芬芭芮芯芰花芳芴芷蕓芹芽芾蓯芐葦藶苊莧萇蒼苧蘇苡苣虬補角言證詁訶評詛識詐訴診詆謅詞詘詔譯詒谷豆豕豸貢財赤走足身軒軔辛辰迎運近迓返迕還這進遠違連遲邑郵邯邰邱邳邴邵邶邸鄒鄴鄰酉里針釘釗釙釕閏闈閑閎間閔閌悶阻阼阽阿陀陂附際陸隴陳陘韌飩餼飪飫飭飯飲驅駁驢鳩雞麥龜", "8":"喪乖乳事些亟享京佩佬佯佰佳佴佶佻佼佾使侃侄侈侉例侍侏侑侔侗供依俠侶僥偵側僑儈儕儂兔兗其具典冼冽凈憑凱函刮到刳制刷券剎刺刻劊劌剴剁劑劾勢匭卑卒卓單賣卦臥卷巹廁叁參叔取呢呤呦周呱味呵呶呷呸呻呼命咀咂咄咆咋和咎詠咐咒咔咕咖嚨咚嚀咝哎囹固國圖坡坤坦坨坩坪坫坭坯坳坶坷坻坼垂垃壟垅壚備夜奄奇奈奉奮奔妮妯妲妹妻妾姆始姐姑姓委姍孟孢季孤孥學宓宕宗官宙定宛宜寶實寵審尚居屈屜屆岢岣巖岫岬嶺岱岳岵岷岸崠巋峁嶧巫帑帔帕帖簾帙帚帛幟幸底庖店廟庚府龐廢建彌弦弧弩弳錄彼往征徂徑忝忠念忽忿態慫怊怍怏怔怕怖怙怛憐怡怦性怩怪怫怯怵懌戕或戧戽戾房所承抨披抬抱抵抹抻押抽抿拂拄擔拆拇拈拉拊拌拍拎拐拓拔拖拗拘拙拚招攏揀擁攔擰撥擇放斧斬於旺昀昂昃昆昊昌明昏易昔昕曇朊朋服杪杭杯杰杲杳杵杷杼松板構枇枉枋析枕林枘枚果枝樅樞棗櫪枧棖槍楓梟柜欣歐武歧歿毆氓氛沓沫沭沮沱沲河沸油治沼沽沾沿泄泅泊泌泓泔法泖泗濘泠泡波泣泥注淚泫泮泯泱泳瀧瀘濼瀉潑澤涇淺炅爐炊炎炒炔炕燉炙煒熗炬爬爸版牦牧物狍狎狐狒狗狙獰玟玢玩玫瑋環現甕甌甙畫甾畀暢疙疚疝瘧癘瘍的盂盱盲直知矸矽礬礦碭碼祆祈祉稈秉穸穹空竺糴線紺紲紱練組紳細織終縐絆紼絀紹繹經紿罔羅者耵耶肅股肢膚肥肩肪肫肭骯肯肱育肴肷肺肼肽腎腫脹脅臾舍艱苑苒苓苔苕苗苘苛苜苞茍苠苤若苦苫苯英苴苷蘋苻茁茂范茄茅茆茇茉茌莖蘢蔦塋煢茚虎虜蟣虱表衩衫襯規覓視誆誄試詿詩詰詼誠誅詵話誕詬詮詭詢詣諍該詳詫諢詡責賢敗賬貨質販貪貧貶購貯貫轉軛輪軟轟迢迤迥迦迨邇迪迫迭迮述逕邾郁郄郅郇郊郎郟鄶鄭鄆采金釷釬釧釤釩釣鍆釹釵閘鬧阜陋陌降限陔陜隸隹雨青非頂頃餞飾飽飼飴駔駛駟駙駒騶駐駝駑駕驛駘魚鳶鳴黽齒", "9":"臨舉亭亮親侮侯侵便促俄俅俊俎俏俐俑俗俘俚俜保俞俟信俁儔儼倆儷儉修茲養冒冠剃削剌前剮劍勃勇勉勛匍南卸厘厚受變敘叛呲咣咤咦咧咨咩咪咫咬咭咯咱咳咴咸咻咽咿哀品哂哄哆哇哈哉哌響哏哐啞噠嘵嗶噦嘩噲哚嚌噥哞喲哪囿型垌壘垓垛垠垡垢垣垤墾坰堊墊埡垮塏垴城埏復奎奏契奕獎姘姚姜姝姣姥姨姹姻姿威娃婁婭嬈嬌孌娜孩孿客宣室宥宦憲宮封將尜嘗屋屎屏峋峒峙峽嶠崢巒差巷帝帶幀幫幽庠庥度庭弈弭彎彖彥彪待徇很徉徊律後怎怒思怠急怨總懟恂恃恍恒恢恤恨恪恫恬慟懨愷惻惱惲戰扁扃拜括拭拮拯拱拴拶拷拼拽拾持掛指按挎挑挖撾撻挾撓擋撟掙擠揮挪挺政故斫施既昝星映春昧昨昭是昱昴昵昶晝顯曷朐枯枰枳枵架枷枸柁柃柄柏某柑柒染柔柘柙柚柝柞檸柢查柩柬柯柰柱柳檉柿梔柵標棧櫛櫳棟櫨櫟欄樹歪殂殃殄殆殤殘段毒毖毗氈氟氡氫泉泵澩潔洄洇洋洌洎灑洗洙洚洛洞津洧洪洫洮洱洲洳洵洹活洼洽派浹澆湞濁測澮濟瀏渾滸濃潯涎炫炭炮炯炱炳炷炸點炻煉熾烀爍爛烴爰牮牯牲牽狠狡狨狩獨狹獅獪猙獄猻玲玳玷玻珀珂珈珉珊珍玨琺瓏瓴甚甭畈畋界畎畏疣疤疥疫疬瘡瘋癸皆皇皈盅盆盈相盹盼盾省眄眇眈眉看眍眨矜矧矩砂砉砌砍砑砒研磚硨砘硯砜砭祓祖祗祚祛祜祝神祠禰禹禺秋種科秒秕秭穿窀突竊窆豎竽竿篤笈類秈籽綁絨結绔繞絎繪給絢絳絡絕絞統缸罘罰美羿耍耐耔耷胂胃胄膽背胍胎胖胗胙胚胛勝胝胞胡胤胥朧胨胩臚脛脈舁舡舢艤茈茗茛茜繭茨茫茬茭茯茱茳茴茵茶茸茹茺茼荀荃荊荇草荏薦荑荒荔莢蕘蓽蕎薈薺蕩榮葷滎犖熒蕁藎蓀蔭荬葒荮藥莒莛虐虹虺虻虼雖蝦蠆蝕蟻螞蚤衍衲衽衿袂襖裊要覘覽覺訇誡誣語誚誤誥誘誨誑說誦誒貳賤賁貰貼貴貺貸貿費賀貽赳赴趙趴轱軻轤軸軹軼轷軫轢軺輕迷迸跡追退送適逃逄逅逆選遜郗郛郜郝郡郢酈鄖酊酋重鈣钚鈦鉅鈍鈔鐘鈉鋇鋼鈑鈐鑰欽鈞鎢鉤鈧鈁鈥鈄鈕鈀閨聞闥閩閭閥閣閡陛陟陡院除隉隕險面革韭音頇項順須颮颯食餌饒餉餃餅首香驍罵驕驊駱駭駢骨鬼鷗鴉鴇鴆", "10":"乘亳俯俱俳俸俺俾倌倍倏倒倔倘候倚倜借倡倥倦倨倩倪倬倭倮債值傾偌健黨兼冢冤冥凄準凇涼凋凌剔剖剜剞剡剝劇勐匪匿卿厝原叟哥哦哧哨哩哭哮哲哳哺哼哽哿唁唆唇唉唏唐唑唔嘜嘮嗩唣喚唧啊圃圄圓垸埂埃埋埒埔埕塒塤堝壺夏套奘奚姬娉娌娑娓娘娟娠娣娥娩娛媧嫻婀孬宰害宴宵家宸容寬賓射屐屑展屙峨峪峭峰峻嶗崍席幬座弱徐徒徠恁戀恐恕恙恚恝恣恧恩恭息懇惡悃悄悌悍悒悔悖悚悛悝悟悅慳憫扇拳拿挈摯攣挨挫振挹挽捂捃捅捆捉捋捌捍捎捏捐捕撈損撿換搗效敉敵敖齋料旁旃旄旅旆晁晃晉晌晏曬曉曄暈暉晚晟朔朕朗柴栓棲栗栝校栩株栲栳樣核根格栽欒桀桁桂桃桄桅框案桉桊桌桎桐桑桓桔桕椏橈楨檔榿橋樺檜槳樁梃梆梢梧梨殉殊殷斃毪氤氦氧氨氬泰流漿浙浚浜浞浠浣浦浩浪浮浯浴海浸浼涂涅消涉涌涑涓涔涕濤澇淶漣潿渦渙滌潤澗漲澀烈烊烘烙燭煙烤煩燒燁燴燙燼熱愛爹特犧狳狴狷貍狺狻狼猁獫璽珙珞珠珥珧珩班琿琊瓞瓶瓷畔留畚畛畜疰皰疲疳疴疸疹疼疽疾痂痃痄病癥癰痙皋皺益盍盎盞鹽監眙眚真眠眢眩砝

主站蜘蛛池模板:
张家界市|
甘孜县|
东乡|
富平县|
武冈市|
山阳县|
云南省|
崇明县|
石首市|
开封县|
巴南区|
郯城县|
剑河县|
多伦县|
许昌市|
丹棱县|
建瓯市|
开原市|
伊吾县|
上饶县|
涞水县|
诸城市|
黄骅市|
潼关县|
绍兴县|
西贡区|
高唐县|
阿坝|
崇阳县|
香港
|
德安县|
永福县|
保山市|
左权县|
岳池县|
望城县|
松溪县|
伊通|
肥城市|
肇源县|
金山区|