{"赤"、 "青"、 "緑"、 "黄"}が文字列として返されました。これを処理して配列に追加するには?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 :(赤)、 "(" ")"を取り除く方法は?あなたは中括弧のために括弧を置換した場合、すべてのアレイを作成するために必要だろうと
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クラスの使い方を学んでいるので、これはNSScannerとcomponentsSeperatedByStringの使い方を学ぶ例になります。 – ARC