2011-02-06 24 views
1

我有一個{「Red」,「Blue」,「Green」,「Yellow」}作爲字符串返回。如何處理這個以添加到數組?如何使用NSScanner或componentsSeperatedByString

#import <Foundation/Foundation.h> 

int main (int argc, const char * argv[]) { 
    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; 
    NSString* sampleString = @"{\"Red\",\"Blue\",\"Green\",\"Yellow\"}"; 
    NSArray* components = [sampleString componentsSeperatedByString:@"\"{"]; 

    [pool drain]; 
    return 0; 
} 

更新的代碼#

NSString* sampleString = @"{\"Red\",\"Blue\",\"Green\",\"Yellow\"}"; 

NSMutableArray *rows = [NSMutableArray array]; 

// Get newline character set 
NSMutableCharacterSet *removeCharacterSet = (id)[NSMutableCharacterSet characterSetWithCharactersInString:@"{(,}"]; 
[removeCharacterSet formIntersectionWithCharacterSet:[[NSCharacterSet whitespaceCharacterSet] invertedSet]]; 

// Characters that are important to the parser 
NSMutableCharacterSet *importantCharactersSet = (id)[NSMutableCharacterSet characterSetWithCharactersInString:@"\""]; 
[importantCharactersSet formUnionWithCharacterSet:removeCharacterSet]; 

// Create scanner, and scan string 
NSScanner *scanner = [NSScanner scannerWithString:sampleString]; 
[scanner setCharactersToBeSkipped:nil]; 
while (![scanner isAtEnd]) 
{   
    BOOL insideQuotes = NO; 
    BOOL finishedRow = NO; 
    NSMutableArray *columns = [NSMutableArray arrayWithCapacity:10]; 
    NSMutableString *currentColumn = [NSMutableString string]; 
    while (!finishedRow) 
    { 
     NSString *tempString; 
     if ([scanner scanUpToCharactersFromSet:importantCharactersSet intoString:&tempString]) { 
      [currentColumn appendString:tempString]; 
     } 

     if ([scanner isAtEnd]) { 
      if (![currentColumn isEqualToString:@""]) [columns addObject:currentColumn]; 
      finishedRow = YES; 
     } 
     else if ([scanner scanCharactersFromSet:removeCharacterSet intoString:&tempString]) { 
      if (insideQuotes) { 
       // Add line break to column text 
       [currentColumn appendString:tempString]; 
      } 
      else { 
       // End of row 
       if (![currentColumn isEqualToString:@""]) [columns addObject:currentColumn]; 
       finishedRow = YES; 
      } 
     } 
     else if ([scanner scanString:@"\"" intoString:NULL]) { 
      if (insideQuotes && [scanner scanString:@"\"" intoString:NULL]) { 
       // Replace double quotes with a single quote in the column string. 
       [currentColumn appendString:@"\""]; 
      } 
      else { 
       // Start or end of a quoted string. 
       insideQuotes = !insideQuotes; 
      } 
     } 
     else if ([scanner scanString:@"," intoString:NULL]) { 
      if (insideQuotes) { 
       [currentColumn appendString:@","]; 
      } 
      else { 
       // This is a column separating comma 
       [columns addObject:currentColumn]; 
       currentColumn = [NSMutableString string]; 
       [scanner scanCharactersFromSet:[NSCharacterSet whitespaceCharacterSet] intoString:NULL]; 
      } 
     } 
    } 
    if ([columns count] > 0) [rows addObject:columns]; 
} 
NSLog(@"This String:%@",[rows objectAtIndex:0]); 

我得到了代碼http://www.macresearch.org/cocoa-scientists-part-xxvi-parsing-csv-data。現在輸出是This String :(紅色),如何擺脫「(」「)」?

+1

它是一個更大的格式的一部分,或者它可能以不同的方式呈現,或者可能存在其他類型/結構的數據嗎? – 2011-02-06 16:00:26

+0

它不是大格式的一部分。我目前正在學習如何使用NSString類,所以這將是一個學習如何使用NSScanner和componentsSeperatedByString的例子。 – ARC 2011-02-06 16:06:38

回答

1

這裏有所有你需要瀏覽你使用的NSScanner實例提供的示例:

NSScanner *scanner = [NSScanner scannerWithString:@"{\"Red\",\"Blue\",\"Green\",\"Yellow\"}"]; 
NSMutableCharacterSet *charactersToSkip = [NSMutableCharacterSet punctuationCharacterSet]; 
[scanner setCharactersToBeSkipped:charactersToSkip]; 
NSMutableArray *substrings = [NSMutableArray array]; 
NSString *substring = @""; 
while (![scanner isAtEnd]) { 
    [scanner scanUpToCharactersFromSet:charactersToSkip intoString:&substring]; 
    [scanner scanCharactersFromSet:charactersToSkip intoString:NULL]; 
    [substrings addObject:substring]; 
} 

NSLog(@"%@", substrings); 

請注意,如果你代替大括號括號,所有你需要做的,創建一個數組從樣本字符串將是:

NSString *sampleString = @"(\"Red\",\"Blue\",\"Green\",\"Yellow\")"; 
NSArray *strings = [sampleString propertyList]; 
NSLog(@"%@", strings); 

......但我不是很清楚你需要完成什麼。