NSStringの中から特定の文字列を検索する方法のメモ。
(iOS6で試してます)
ポイント
・rangeOfString
・全検索の場合、loop でrangeを進める
サンプルコード
@implementation ViewController
– (void)viewDidLoad
{
[super viewDidLoad];
// パターンを準備
NSString *str = @”000000000000100000000000000000000101100000″;
// ***************
//1. 最初の1を検索
// ***************
NSRange range = [str rangeOfString:@”1″];
NSLog(@”find first :%d”, range.location);
// ***************
//2. 全ての1を検索
// ***************
NSMutableArray *results = [[NSMutableArray alloc] init];
NSString *word = @”1″;
NSRange target = NSMakeRange(0, [str length]);
// 全件検索
while (target.location != NSNotFound) {
// 検索
target = [str rangeOfString:@”1″ options:0 range:target];
if (target.location != NSNotFound) {
// 結果格納
[results addObject:[NSValue valueWithRange:target]];
// 次の検索範囲を設定
int from = target.location + [word length];
int end = [str length] – from;
target = NSMakeRange(from, end);
}
}
// 出力
for (NSValue *val in results) {
NSLog(@”find all :%d”, [val rangeValue].location);
}
}
@end
Kow
これだと、最初の@”1″はresultsに入ってないですよね?
mizu
results には パターン文字列の 1 に関するNSRangeが格納されます
出力すると
find first :12
find all :12, find all :33, find all :35, find all :36
というログが出力されます。