2012-01-15 9 views
3

フレーズを単語、数字、句読点、スペース/タブに分割する必要があります。私は物事の秩序を保つことも望みます。テキストを単語、数字、句読点に分割する

NSString *text = [NSString stringWithFormat:@"The 3 quick:\"brown fox, jump's\" over."]; 

これは私が得るために必要なリストのようなものです:

['The', ' ', '3', ' ', 'quick, ':', '"', 'brown', ' ', 'fox', ',', ' ', 'jump's', ' ', '.'] 

ありがとうございました!!

+2

「クイック」と「:」の間のスペースはどこにありますか? –

+1

全桁の文字列を保存または分割する必要がありますか?つまり、「333 quick」は、「、」、「333」、「quick」、「、」、「3」、「3」、 、 "3"、 ""、 "quick"] '? – dasblinkenlight

+0

数字を保存する必要があります。 "333"は333のままになります。 –

答えて

2

私はNSScanner & NSCharacterSetを使って書いたこのカテゴリ試してみてください:

@interface NSString(Splitting) 

-(NSArray *) arrayBySeparatingComponentsInCharacterSet:(NSCharacterSet *) charSet; 

@end 

@implementation NSString(Splitting) 

BOOL scanOneCharacterFromSetIntoString(NSScanner *self, NSCharacterSet * charSet, NSString **outStr); 
BOOL scanOneCharacterFromSetIntoString(NSScanner *self, NSCharacterSet * charSet, NSString **outStr) 
{ 
    // check for index out of bounds 
    NSString *inStr = self.string; 

    if (self.scanLocation >= inStr.length) 
    { 
     return NO; 
    } 

    unichar ch = [inStr characterAtIndex:self.scanLocation]; 

    if (![charSet characterIsMember:ch]) 
    { 
     return NO; 
    } 

    self.scanLocation++; 
    if (outStr) 
    { 
     *outStr = [NSString stringWithCharacters:&ch length:1]; 
    } 

    return YES; 
} 

-(NSArray *) arrayBySeparatingComponentsInCharacterSet:(NSCharacterSet *)charSet 
{ 
    NSScanner *scanner = [NSScanner scannerWithString:self]; 
    NSMutableArray *result = [NSMutableArray array]; 

    NSString *temp = nil; 
    while ([scanner scanUpToCharactersFromSet:charSet intoString:&temp] || scanOneCharacterFromSetIntoString(scanner, charSet, &temp)) {; 
     [result addObject:temp]; 

     if ([scanner scanLocation] >= [self length]) 
     { 
      break; 
     } 

     unichar temp2 = [self characterAtIndex:[scanner scanLocation]]; 

     if ([charSet characterIsMember:temp2]) 
     { 
      [result addObject:[NSString stringWithFormat:@"%c", temp2]]; 
      // only update the scan location if the scan was sucessful 
      [scanner setScanLocation:[scanner scanLocation] + 1]; 
     } 
    } 

    return result; 
} 

@end 

int main (int argc, const char * argv[]) 
{ 
    @autoreleasepool { 

     NSString *str = @"The 3 quick:\"brown fox, jump's\" over."; 
     NSArray *array = [str arrayBySeparatingComponentsInCharacterSet:[NSCharacterSet characterSetWithCharactersInString:@" :\",'."]]; 
     NSLog(@"%@", array); 
    } 
} 

はちょうどあなたが必要なものに文字セットを変更、あなたが必要なものであるべき。また、これはARCを有効にしてコンパイルされているため、参照カウントされた環境ではメモリ管理が適切に機能しない場合があります。

+0

ありがとう!それはすばらしく働いた。あなたは、時間は言うまでもなく、欲求不満の私を救った。 –

+1

ねえ、問題はありません、ただ喜んで助けてください。 –

+0

1つの問題:NSString * str = @ "hello world ..."; 文の末尾に複数の句読点文字があるとクラッシュします。また、省略記号(3つのドット "...")を扱う方法はありますか? –

関連する問題