1
我正在開發一個應用程序,它需要限制用戶輸入字符串文本到200個字符。如何在IOS中找到多語言句子的字符串長度
允許用戶以任何語言輸入字符串值。
我能夠獲得英文字符的字符串長度,但不能用於其他語言。
任何人都可以幫助我。
預期結果:
- '羅傑是個不錯的傢伙' -19
- 'रॉजरएकछानमाणूसआहे' - 16
- '羅傑是一個好人' - 7
我正在開發一個應用程序,它需要限制用戶輸入字符串文本到200個字符。如何在IOS中找到多語言句子的字符串長度
允許用戶以任何語言輸入字符串值。
我能夠獲得英文字符的字符串長度,但不能用於其他語言。
任何人都可以幫助我。
預期結果:
您可能正在尋找extended grapheme clusters
,這是用戶感知角色的一個很好的定義。 Swift String的character
視圖提供了這個方便。
可可的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
感謝尼古拉,給予了很大的幫助。 –
是否有理由'string.length'不起作用?你是否真的想要計算字形? – Avi
@Avi字符與字形是不同的概念。例如,考慮連字。 'ffi'是一個將三個字符組合成一個字形的連字符。 –
我很清楚這一點。我試圖讓問題海報來澄清這是她想要的。我想出了基本上與你做的答案相同的代碼,但是我沒有發佈它,因爲你擊敗了我。 – Avi