我有一个 NSString 需要逐个字符地检查,并且:
examine char
perform calculation
loop (until string ends)
对最好的方法有什么想法吗?我需要将 NSString 转换为 NSArray 或 C 字符串吗?
我有一个 NSString 需要逐个字符地检查,并且:
examine char
perform calculation
loop (until string ends)
对最好的方法有什么想法吗?我需要将 NSString 转换为 NSArray 或 C 字符串吗?
最简单的方法是使用NSString
's方法: characterAtIndex:
int charIndex;
for (charIndex = 0; charIndex < [myString length]; charIndex++)
{
unichar testChar = [myString characterAtIndex:charIndex];
//... your code here
}
-characterAtIndex:
是最简单的方法,但最好的方法是下拉到 CFString 并使用 CFStringInlineBuffer,如以下方法:
- (NSIndexSet *) indicesOfCharactersInSet: (NSCharacterSet *) charset
{
if ( self.length == 0 )
return ( nil );
NSMutableIndexSet * set = [NSMutableIndexSet indexSet];
CFIndex i = 0;
UniChar character = 0;
CFStringInlineBuffer buf;
CFStringInitInlineBuffer( (CFStringRef)self, &buf, CFRangeMake(0, self.length) );
while ( (character = CFStringGetCharacterFromInlineBuffer(&buf, i)) != 0 )
{
if ( [charset characterIsMember: character] )
[set addIndex: i];
i++;
}
return ( set );
}
这更好,因为它会一次抓取多个字符,并根据需要获取更多字符。for ( id x in y )
它实际上是ObjC 2 中的字符串字符版本。