どうもです。見習いプログラマーの naopon です!
明けましておめでとうございます。m(_ _ )m
Objective-C で単純に文字列を分割する場合は、以下のような感じで分割しますが、
個人的には正規表現で分割する方が好きだ。。。
先人たちは素晴らしいですね。
【通常の分割】
1 2 3 4 5 6 7 8 9 10 11 |
NSString *str = @"AAA BBB CCC"; // 半角スペースを区切りとして文字列を分割 NSArray *array = [str componentsSeparatedByString:@" "]; for (NSString *component in array) { NSLog(@"%@", component); // AAA // BBB // CCC } |
【正規表現の分割】
1 2 3 4 5 6 7 8 9 10 11 |
#import <Foundation/Foundation.h> @interface NSString (SplitPattern) // 文字列を改行で分割する - (NSArray *)splitNewLine; // 正規表現のパターンで文字列を分割する - (NSArray *)splitPattern:(NSString *)pattern; @end |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
#import "NSString+SplitPattern.h" @implementation NSString (SplitPattern) // 文字列を改行で分割する - (NSArray *)splitNewLine { return [self splitPattern:@"(\r|(\r?\n))"]; } // 正規表現のパターンで文字列を分割する - (NSArray *)splitPattern:(NSString *)pattern { NSMutableArray *result = [[NSMutableArray alloc] initWithCapacity:0]; @autoreleasepool { NSError *error = NULL; NSRegularExpression *regexp = [NSRegularExpression regularExpressionWithPattern:pattern options:0 error:&error]; [self componentsSeparatedByRegularExpression:regexp usingBlock:^(NSString *component) { [result addObject:component]; }]; } return result; } - (void)componentsSeparatedByRegularExpression:(NSRegularExpression *)regexp usingBlock:(void (^)(NSString *))block { __block int startPage = 0; [regexp enumerateMatchesInString:self options:0 range:NSMakeRange(0, self.length) usingBlock:^(NSTextCheckingResult *match,NSMatchingFlags flag,BOOL *stop) { NSUInteger matchLocation = match.range.location; NSUInteger matchLength = match.range.length; block([self substringWithRange:NSMakeRange(startPage, matchLocation - startPage)]); startPage = (int)(matchLocation + matchLength); }]; block([self substringWithRange:NSMakeRange(startPage, self.length - startPage)]); } @end |
カテゴリーにして機能拡張しちゃえば超便利でいいですね!
NSString+SplitPattern.h
NSString+SplitPattern.m