2011-04-19 85 views
0

是否可以在objective-c框架内标识NSString中特定字符的位置和存在?例如,如果我有NSString @“hello”,并且想知道char“e”的位置和存在,我将如何能够做到这一点?读取NSString中的每个字符

回答

2

有一个字符串中查找单个字符特定的方法,但你可以只搜索长度为1的子串的范围,并要求返回的范围内的位置,因为这样的:

NSRange charRange = [@"hello" rangeOfString:@"e"]; 
NSUInteger index = charRange.location; 
if (index == NSNotFound) { 
    NSLog(@"substring not found"); 
} 

你可以在这里找到完整文档:rangeOfString:

要找到你可能想要做这样的事情在@"hello"所有@"e"的指标,虽然:

NSString *haystack = @"hellol"; 
NSString *needle = @"l"; 
NSMutableIndexSet *indices = [NSMutableIndexSet indexSet]; 
NSUInteger haystackLength = [haystack length]; 
NSRange range = NSMakeRange(0, haystackLength); 
NSRange searchRange = range; 
while (range.location != NSNotFound) { 
    range = [haystack rangeOfString:needle options:0 range:searchRange]; 
    if (range.location != NSNotFound) { 
     [indices addIndex:range.location]; 
     NSUInteger searchLocation = range.location + 1; 
     NSUInteger searchLength = haystackLength - searchLocation; 
     if (searchLocation >= haystackLength) { 
      break; 
     } 
     searchRange = NSMakeRange(searchLocation, searchLength); 
    } 
} 
//indices now holds the indices of all occurrences of 'e' in "hello". 

文档:NSMutableIndexSetNSIndexSet

编辑:替换算法从在他的评论中所描述的这个答案@bbum的一个。

+0

...如果没有'e',你会得到'NSNotFound'的位置。 – Tommy 2011-04-19 21:34:24

+0

是的,只是在你评论时加入到我的回答中。 ;) – Regexident 2011-04-19 21:36:42

+0

如果我改为messaged:'[@“hello”rangeOfString:@“l”]''会返回'index' – locoboy 2011-04-19 21:47:15

0

看看苹果文档NSString

- (NSRange)rangeOfString:(NSString *)aString