如何在IOS中查找多语言句子的字符串长度

时间:2015-11-05 07:52:53

标签: objective-c unicode nsstring multilingual string-length

我正在开发一个需要限制用户输入字符串文本到200个字符的应用程序。

允许用户以任何语言输入字符串值。

我能够获得英文字符的字符串长度,但不能获得其他语言的字符串长度。

任何人都可以帮助我。

预期结果:

  • '罗杰是一个好人'-19
  • 'रॉजरएकछानमाणूसआहे' - 16
  • '罗杰是一个好人' - 7

1 个答案:

答案 0 :(得分:2)

您可能正在寻找extended grapheme clusters,这是用户感知角色的良好定义。 Swift String的character视图可以方便地提供。

Cocoa的NSString提供了enumerateSubstringsInRange:options:usingBlock:,可用于计算"组成的字符序列",类似:

@interface NSString (ComposedCharacterSequenceCount)
@property (nonatomic, readonly, getter=nr_composedCharacterSequenceCount) NSInteger composedCharacterSequenceCount;
@end

@implementation NSString (ComposedCharacterSequenceCount)
- (NSInteger)nr_composedCharacterSequenceCount
{
    __block NSInteger count = 0;
    [self enumerateSubstringsInRange:(NSRange){0, self.length}
                             options:NSStringEnumerationByComposedCharacterSequences | NSStringEnumerationSubstringNotRequired
                          usingBlock:^(NSString * _Nullable substring, NSRange substringRange, NSRange enclosingRange, BOOL * _Nonnull stop) {
                              count += 1;
                          }];
    return count;
}
@end

此代码段为NSString添加了一个类别,可让您轻松计算字符数:

NSLog(@"count: %@", @(@"Roger is a nice guy".composedCharacterSequenceCount));
NSLog(@"count: %@", @(@"रॉजर एक छान माणूस आहे".composedCharacterSequenceCount));
NSLog(@"count: %@", @(@"罗杰是一个好人".composedCharacterSequenceCount));

打印:

count: 19
count: 16
count: 7