NSScanner は、NSString を探索するためのクラスだ。NSCharacterSet といっしょに使うことで、NSString の中を、いろいろな形でたぐれる。ここでは、トークン分割をやってみよう。いくつかのデリミタを設定して、それごとに NSString を分割するんだ。そのために、scanCharactersFromSet:intoString と scanUpToCharactersFromSet:intoString を使う。
Foundation/NSScanner.h
- (BOOL)scanCharactersFromSet:(NSCharacterSet *)set intoString:(NSString **)value;
- (BOOL)scanUpToCharactersFromSet:(NSCharacterSet *)set intoString:(NSString **)value;
どちらも、現在のスキャン位置からスキャンを開始して、文字列を取り出すメソッドだ。scanCharactersFromSet:intoString: は、指定された NSCharacterSet の文字が、出ている限り、スキャンをすすめる。それに対して、scanUpToCharactersFromSet:intoString: は、NSCharacterSet の文字が、出て来るまで、スキャンするんだ。
この 2 つを利用してトークン分割を書くと、こうなる。
(sample)
NSCharacterSet* chSet;
NSString* scannedName;
NSScanner* scanner;
string = @"abc, def,gh, ijk";
chSet = [NSCharacterSet characterSetWithCharactersInString:@", "];
scanner = [NSScanner scannerWithString:string];
while(![scanner isAtEnd]) {
if([scanner scanUpToCharactersFromSet:chSet intoString:&scannedName]) {
NSLog(scannedName);
}
[scanner scanCharactersFromSet:chSet intoString:nil];
}
これで、トークン分割されるぜ!
■関連リンク:
トークンに分割する (NSString)