2015-11-05 32 views
1

我正在開發一個應用程序,它需要限制用戶輸入字符串文本到200個字符。如何在IOS中找到多語言句子的字符串長度

允許用戶以任何語言輸入字符串值。

我能夠獲得英文字符的字符串長度,但不能用於其他語言。

任何人都可以幫助我。

預期結果:

  • '羅傑是個不錯的傢伙' -19
  • 'रॉजरएकछानमाणूसआहे' - 16
  • '羅傑是一個好人' - 7
+0

是否有理由'string.length'不起作用?你是否真的想要計算字形? – Avi

+0

@Avi字符與字形是不同的概念。例如,考慮連字。 'ffi'是一個將三個字符組合成一個字形的連字符。 –

+0

我很清楚這一點。我試圖讓問題海報來澄清這是她想要的。我想出了基本上與你做的答案相同的代碼,但是我沒有發佈它,因爲你擊敗了我。 – Avi

回答

2

您可能正在尋找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 
+0

感謝尼古拉,給予了很大的幫助。 –

相關問題