我需要计算某种已知语言的字符串字长,它有一些字母序列,将其计为 1 个字母。说字母“ao”是一个字母。我怎样才能做到这一点?
问问题
150 次
1 回答
2
一个想法是用单个字符替换每次出现的字母序列并计算结果的长度:
NSString *string = @"Hello world";
NSMutableString *tmp = [string mutableCopy];
NSArray *sequences = @[@"ll", @"wo"];
for (NSString *seq in sequences) {
[tmp replaceOccurrencesOfString:seq
withString:@"."
options:NSCaseInsensitiveSearch
range:NSMakeRange(0, [tmp length])];
}
// tmp is "He.o .rld" now
NSUInteger length = [tmp length];
备注: length
不将“组合字符”计为单个字符。如果这是一个问题,您必须使用enumerateSubstringsInRange:options:usingBlock:
选项NSStringEnumerationByComposedCharacterSequences
来正确计算字符数。例如,这适用于所有“UTF-16”代理对(例如表情符号)。它可能也适用于其他字符,例如韩文字符,我现在不确定。
ADDED:以下方法使用正则表达式并且应该也可以工作。优点可能是不会创建临时字符串。但是应该衡量哪种方法真的更快。
NSString *string = @"Hello world";
NSString *pattern = @"ll|wo|.";
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:pattern
options:NSRegularExpressionCaseInsensitive
error:NULL];
NSUInteger length = [regex numberOfMatchesInString:string
options:0
range:NSMakeRange(0, [string length])];
NSLog(@"length = %d", length);
于 2013-07-13T19:12:14.033 回答