如何在 IOS 中查找多语言句子的字符串长度
How to find string length for the multi language sentence in IOS
我正在开发一个需要限制用户输入不超过 200 个字符的字符串文本的应用程序。
允许用户以任何语言输入字符串值。
我可以获取英文字符的字符串长度,但不能获取其他语言的字符串长度。
谁能帮帮我
预期结果:
- 'Roger is a nice guy'-19
- '¶
- '罗杰是一个好人' - 7
您可能正在寻找 extended grapheme clusters
,这是对用户感知特征的一个很好的定义。 Swift String 的 character
视图提供了方便。
Cocoa的NSString
提供了enumerateSubstringsInRange:options:usingBlock:
可以用来统计"composed character sequences",类似:
@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
我正在开发一个需要限制用户输入不超过 200 个字符的字符串文本的应用程序。
允许用户以任何语言输入字符串值。
我可以获取英文字符的字符串长度,但不能获取其他语言的字符串长度。
谁能帮帮我
预期结果:
- 'Roger is a nice guy'-19
- '¶
- '罗杰是一个好人' - 7
您可能正在寻找 extended grapheme clusters
,这是对用户感知特征的一个很好的定义。 Swift String 的 character
视图提供了方便。
Cocoa的NSString
提供了enumerateSubstringsInRange:options:usingBlock:
可以用来统计"composed character sequences",类似:
@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