NSScanner

NSScanner

文字列をトークンに分割する

Keywords: tokenize

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)