因为iOS无法和C语言一样计算字符串的字符长度,在需要将一个中文字计算成两个字符的时候,我在网上查到了这个方法。
但是不知道什么原因输入中文“一”的时候,计算出来的会是一个字符(原谅我没有深究……)不知道有没有人跟我一样。
//判断一个字符是不是中文。
-(BOOL)isChinese:(NSString*)c{
int strlength = 0;
char* p = (char*)[c cStringUsingEncoding:NSUnicodeStringEncoding];
for (int i=0 ; i<[c lengthOfBytesUsingEncoding:NSUnicodeStringEncoding] ;i++) {
if (*p) {
p++;
strlength++;
}
else {
p++;
}
}
return ((strlength/2)==1)?YES:NO;
}
//计算一段字符串的长度,两个英文字符占一个长度。
- (int)countTheStrLength:(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+1)/2;
}
之后我就自己使用了一个不太专业的办法计算,既然OC中中文无法用ASCII转化,那我就认为用cStringUsingEncoding:NSASCIIStringEncoding返回空的就是中文(至少目前还没发生错误)。
- (int)convertToInt:(NSString*)strtemp {
int strlength = 0;
for(int i =0; i < [strtemp length]; i++)
{
NSString *temp = [strtemp substringWithRange:NSMakeRange(i, 1)];
if ([self isChinese:temp]) {
strlength++;
}
strlength++;
}
return (strlength+1)/2;
}
-(BOOL)isChinese:(NSString*)c{
if (c.length && [c cStringUsingEncoding:NSASCIIStringEncoding]) {
return NO;
}
return YES;
}