没有合适的资源?快使用搜索试试~ 我知道了~
思路 1、汉字字典库匹配笔画数 优点: 实现逻辑简单,字典库好扩展 缺点: 内存消耗较大(不过也能承担) 思路: 这种实现思路是比较简单的,具体思路是将简体汉字所有字都穷举出来,然后分别匹配上指定的笔画数,当做一个大的数据库,每次都去查询一下。 2、汉字GBK编码匹配笔画数 优点:相比字典库匹配,效率高,速度快 缺点:添加编码库不好添加,不好扩展 思路: 这种实现方案是需要获取GBK编码分别对应的笔画数,放到指定数组(数据库)中,每次通过输入的汉字 转码为二进制,通过二进制的值 匹配数据库中的笔画数。 -**************************废话少说,盘它!-**********
资源详情
资源评论
资源推荐
iOS如何获取汉字(简体中文)笔画数详解如何获取汉字(简体中文)笔画数详解
思路思路
1、汉字字典库匹配笔画数
优点: 实现逻辑简单,字典库好扩展
缺点: 内存消耗较大(不过也能承担)
思路: 这种实现思路是比较简单的,具体思路是将简体汉字所有字都穷举出来,然后分别匹配上指定的笔画数,当做一个大
的数据库,每次都去查询一下。
2、汉字GBK编码匹配笔画数
优点:相比字典库匹配,效率高,速度快
缺点:添加编码库不好添加,不好扩展
思路: 这种实现方案是需要获取GBK编码分别对应的笔画数,放到指定数组(数据库)中,每次通过输入的汉字 转码为二进
制,通过二进制的值 匹配数据库中的笔画数。
-**************************废话少说,盘它!-**************************
上代码,盘它!上代码,盘它!
先来看下成果
** 测试代码 **
dispatch_async(dispatch_get_global_queue(0, 0), ^{
// 处理耗时操作的代码块...
NSString *testString = @"浓睡不消残酒";
// 字典查询匹配
[self testStrokeCount:testString];
// 编码查询匹配
[self chineseCharactersCount:testString];
});
** 测试结果 **
------- 字典查询匹配
TemplateApp[78833:3000133] 汉字:浓 ------ 笔画数:9
TemplateApp[78833:3000133] 汉字:睡 ------ 笔画数:13
TemplateApp[78833:3000133] 汉字:不 ------ 笔画数:4
TemplateApp[78833:3000133] 汉字:消 ------ 笔画数:10
TemplateApp[78833:3000133] 汉字:残 ------ 笔画数:9
TemplateApp[78833:3000133] 汉字:酒 ------ 笔画数:10
------ 编码查询匹配
TemplateApp[78833:3000133] 汉字:浓 ------ 笔画数:9
TemplateApp[78833:3000133] 汉字:睡 ------ 笔画数:13
TemplateApp[78833:3000133] 汉字:不 ------ 笔画数:4
TemplateApp[78833:3000133] 汉字:消 ------ 笔画数:10
TemplateApp[78833:3000133] 汉字:残 ------ 笔画数:9
TemplateApp[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合法字符
剩余10页未读,继续阅读
weixin_38678057
- 粉丝: 6
- 资源: 870
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 论文(最终)_20240430235101.pdf
- 基于python编写的Keras深度学习框架开发,利用卷积神经网络CNN,快速识别图片并进行分类
- 最全空间计量实证方法(空间杜宾模型和检验以及结果解释文档).txt
- 5uonly.apk
- 蓝桥杯Python组的历年真题
- 2023-04-06-项目笔记 - 第一百十九阶段 - 4.4.2.117全局变量的作用域-117 -2024.04.30
- 2023-04-06-项目笔记 - 第一百十九阶段 - 4.4.2.117全局变量的作用域-117 -2024.04.30
- 前端开发技术实验报告:内含4四实验&实验报告
- Highlight Plus v20.0.1
- 林周瑜-论文.docx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0