最近項目有個需求,文章的作者最多顯示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;
}