最近项目有个需求,文章的作者最多显示7个中文字,英文字符算半个中文字,超过7个中文字,则显示:前7个中文字+...,使用NSString的length方法,不管是一个中文还是英文字符,都是返回1。因此写了下面的方法,传入需要截取的原字符串和最多显示的字数(两个英文字符算一个中文字符):
-(NSString*)subTextString:(NSString*)str len:(NSInteger)len{
if(str.length<=len)return str;
int count=0;
NSMutableString *sb = [NSMutableString string];
for (int i=0; i<str.length; i++) {
NSRange range = NSMakeRange(i, 1) ;
NSString *aStr = [str substringWithRange:range];
count += [aStr lengthOfBytesUsingEncoding:NSUTF8StringEncoding]>1?2:1;
[sb appendString:aStr];
if(count >= len*2) {
return (i==str.length-1)?[sb copy]:[NSString stringWithFormat:@"%@...",[sb copy]];
}
}
return str;
}