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 :(紅色),如何擺脫「(」「)」?
它是一個更大的格式的一部分,或者它可能以不同的方式呈現,或者可能存在其他類型/結構的數據嗎? – 2011-02-06 16:00:26
它不是大格式的一部分。我目前正在學習如何使用NSString類,所以這將是一個學習如何使用NSScanner和componentsSeperatedByString的例子。 – ARC 2011-02-06 16:06:38