如何遍历NSString的字符

Vol*_*ort 10 string objective-c

NSString *myStrings = @"abcdefghijklmnopqrstuvwxyz";
Run Code Online (Sandbox Code Playgroud)

我怎么能在Objective-C for循环中迭代每个字母(a,b,c,d,e等)?

pyt*_*ick 22

一种方法是使用简单的for循环:

for (NSInteger charIdx=0; charIdx<myStrings.length; charIdx++)
    // Do something with character at index charIdx, for example:
    NSLog(@"%C", [myStrings characterAtIndex:charIdx]);
Run Code Online (Sandbox Code Playgroud)

  • 请注意,有人发布在<a rel="nofollow noreferrer" href="http://stackoverflow.com/questions/4158646/most-efficient-way-to-iterate-over-all-the-chars-in-an-nsstring">此讨论</a>指出Apple特别不鼓励使用characterAtIndex来做到这一点. (7认同)

小智 6

我建议使用getCharacters:range:而不是.您可以使用一个对象调用获取原始unicode数组,并可以迭代结果.输出相同,但速度更快.

NSString *inputString = @"abcdefghijklmnopqrstuvwxyz";
NSUInteger length = inputString.length;
unichar buffer[length+1];
// do not use @selector(getCharacters:) it's unsafe
[inputString getCharacters:buffer range:NSMakeRange(0, length)];

for(int i = 0; i < length; i++)
{
    NSLog(@"%C", buffer[i]);
}
Run Code Online (Sandbox Code Playgroud)