ios开发 之 简体和繁体中文转换


原文地址:http://blog.csdn.net/zeng_zhiming/article/details/68925881


最近做项目,需要用到简体和繁体中文转换,因此封装了一个中文转换的类贡献给大家。


大概思路是这样的:

1、先加载简体中文和繁体中文码表

2、将需要转换的中文字符拿到码表上查找相应位置

3、如果查找到了,则取出另一个码表上对应的字符;如果没查到,则不进行转换。


废话不多说,直接上源代码:

//
//  ZMChineseConvert.m
//  ZMChineseConvert
//
//  Created by ZengZhiming on 2017/3/30.
//  Copyright © 2017年 菜鸟基地. All rights reserved.
//

#import "ZMChineseConvert.h"

@interface ZMChineseConvert ()

@property(nonatomic, strong) NSString *simplifiedCode;  //!< 简体中文码表.
@property(nonatomic, strong) NSString *traditionalCode; //!< 繁体中文码表.

@end

@implementation ZMChineseConvert


/**
 简体中文转繁体中文
 
 @param simpString 简体中文字符串
 @return 繁体中文字符串
 */
+ (NSString *)convertSimplifiedToTraditional:(NSString *)simpString
{
    return [[ZMChineseConvert getInstance] convertSimplifiedToTraditional:simpString];
}


/**
 繁体中文转简体中文
 
 @param tradString 繁体中文字符串
 @return 简体中文字符串
 */
+ (NSString*)convertTraditionalToSimplified:(NSString*)tradString
{
    return [[ZMChineseConvert getInstance] convertTraditionalToSimplified:tradString];
}


// 获取单例对象
+ (instancetype)getInstance
{
    static id instance = nil;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        instance = [[self alloc] init];
    });
    return instance;
}

- (instancetype)init
{
    self = [super init];
    if (self) {
        // 加载简体中文和繁体中文码表
        NSString *resourcePath = [ [NSBundle mainBundle] resourcePath];
        self.simplifiedCode = [NSString stringWithContentsOfFile:[resourcePath stringByAppendingPathComponent:@"SimplifiedCode.txt"] encoding:NSUTF8StringEncoding error:nil];
        self.traditionalCode = [NSString stringWithContentsOfFile:[resourcePath stringByAppendingPathComponent:@"TraditionalCode.txt"] encoding:NSUTF8StringEncoding error:nil];
    }
    return self;
}


/**
 简体中文转繁体中文
 
 @param simpString 简体中文字符串
 @return 繁体中文字符串
 */
- (NSString *)convertSimplifiedToTraditional:(NSString *)simpString
{
    // 空值判断
    if (IsNullString(simpString)) {
        return nil;
    }
    
    // 存储转换结果
    NSMutableString *resultString = [NSMutableString string];
    
    // 遍历字符串中的字符
    NSInteger length = [simpString length];
    for (NSInteger i = 0; i < length; i++)
    {
        // 在简体中文中查找字符位置,如果存在则取出对应的繁体中文
        NSString *simCharString = [simpString substringWithRange:NSMakeRange(i, 1)];
        NSRange charRange = [self.simplifiedCode rangeOfString:simCharString];
        if(charRange.location != NSNotFound) {
            NSString *tradCharString = [self.traditionalCode substringWithRange:charRange];
            [resultString appendString:tradCharString];
        }else{
            [resultString appendString:simCharString];
        }
    }
    return resultString;
}


/**
 繁体中文转简体中文
 
 @param tradString 繁体中文字符串
 @return 简体中文字符串
 */
- (NSString *)convertTraditionalToSimplified:(NSString *)tradString
{
    // 空值判断
    if (IsNullString(tradString)) {
        return nil;
    }
    
    // 存储转换结果
    NSMutableString *resultString = [NSMutableString string];
    
    // 遍历字符串中的字符
    NSInteger length = [tradString length];
    for (NSInteger i = 0; i < length; i++)
    {
        // 在繁体中文中查找字符位置,如果存在则取出对应的简体中文
        NSString *tradCharString = [tradString substringWithRange:NSMakeRange(i, 1)];
        NSRange charRange = [self.traditionalCode rangeOfString:tradCharString];
        if(charRange.location != NSNotFound) {
            NSString *simCharString = [self.simplifiedCode substringWithRange:charRange];
            [resultString appendString:simCharString];
        }else{
            [resultString appendString:tradCharString];
        }
    }
    return resultString;
}

@end

使用也非常简单:

/** 简转繁点击响应 */
- (IBAction)onSimpToTradAction:(UIButton *)sender {
    _resultLabel.text = [ZMChineseConvert convertSimplifiedToTraditional:_textField.text];
}

/** 繁转简点击响应 */
- (IBAction)onTradToSimpAction:(UIButton *)sender {
    _resultLabel.text = [ZMChineseConvert convertTraditionalToSimplified:_textField.text];
}




如果大家有更好的简体和繁体中文转换方式,请在博客留言,楼主不胜感激。




  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值