NSString ー rangeOfStringで文字列検索

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

← 過去の投稿へ

次の投稿へ →

2件のコメント

  1. これだと、最初の@”1″はresultsに入ってないですよね?

    • results には パターン文字列の 1 に関するNSRangeが格納されます

      出力すると
      find first :12
      find all :12, find all :33, find all :35, find all :36
      というログが出力されます。