我有UITextField
用户将输入字符。它很简单,我怎样才能返回它的实际长度?当字符串包含A-Z 1-9个字符时,它按预期工作,但任何表情符号或特殊字符都会被重复计算。
这是最简单的格式,对于像表情符号这样的特殊字符,只需要分配2个字符:
NSLog(@"Field '%@' contains %i chars", myTextBox.text, [myTextBox.text length] );
我已经尝试使用characterAtIndex
,substringFromIndex
等循环遍历每个角色,并且无处可去。
根据下面的答案,用于计算字符的确切代码(希望这是正确的方法但它有效..):
NSString *sString = txtBox.text;
__block int length = 0;
[sString enumerateSubstringsInRange:NSMakeRange(0, [sString length])
options:NSStringEnumerationByComposedCharacterSequences
usingBlock:^(NSString *substring, NSRange substringRange, NSRange enclosingRange, BOOL *stop) {
length++;
}];
NSLog(@"Total: %u", length );
答案 0 :(得分:12)
[myTextBox.text length]
返回unichars的计数,而不是字符串的可见长度。 é = e+´
这是2个unichars。表情符号字符应包含更多1个unichar。
下面的示例枚举字符串中的每个字符块。这意味着如果您记录的substringRange
范围可能超过1。
__block NSInteger length = 0;
[string enumerateSubstringsInRange:range
options:NSStringEnumerationByComposedCharacterSequences
usingBlock:^(NSString *substring, NSRange substringRange, NSRange enclosingRange, BOOL *stop) {
length++;
}];
您应该去观看2011年WWDC会议128 - 高级文本处理。他们解释了为什么会这样。真的很棒!
我希望这对任何帮助都有帮助 干杯!
答案 1 :(得分:0)
我们还可以将以下选项视为解决方案
const char *cString = [myTextBox UTF8String];
int textLength = (int)strlen(cString);
这将适用于特殊字符和表情符号