Objective c Split String Issue

Str*_*rce 3 arrays split objective-c ios

我正在尝试将一个字符串拆分为一个NSArray,但是我有一个问题忽略了有语音标记的字符串.

例如

NSString *example = @"100 200 300 \"TEST ITEM\" 500";
NSArray *array = [example componentsSeparatedByString:@" "];
Run Code Online (Sandbox Code Playgroud)

然而,阵列显然被创建为100,100,300,"Test,ITEM",500.是否可以将""作为一个对待?

谢谢

Jes*_*sak 5

您可以使用众所周知的CSV Parser,它可以配置为使用空格作为分隔符,并且可以正确处理双引号.这假设您需要通常的CSV处理,例如在双引号字符串中转义双引号等.

否则,您可能需要自己编写解析逻辑; 看看NSScanner,这会让你读到一个空格或双引号,看看你得到什么,然后读到下一个空格/双引号等.

例:

@interface ItemParser : NSObject<CHCSVParserDelegate>

- (NSArray *)itemsFromString:(NSString *)input;

@end

@implementation ItemParser {
    NSMutableArray *_results;
}

- (NSArray *)itemsFromString:(NSString *)input {
    _results = [NSMutableArray array];

    NSStringEncoding encoding = [input fastestEncoding];
        NSInputStream *stream = [NSInputStream inputStreamWithData:[input dataUsingEncoding:encoding]];
    CHCSVParser *parser = [[CHCSVParser alloc] initWithInputStream:stream usedEncoding:&encoding delimiter:' '];
    parser.delegate = self;
    [parser parse];

    return _results;
}

- (void)parser:(CHCSVParser *)parser didReadField:(NSString *)field atIndex:(NSInteger)fieldIndex {
    [_results addObject:field];
}
@end
Run Code Online (Sandbox Code Playgroud)

你会这样使用它:

NSString *example = @"100 200 300 \"TEST ITEM\" 500";
ItemParser *parser = [[ItemParser alloc] init];
NSLog(@"%@", [parser itemsFromString:example]);
Run Code Online (Sandbox Code Playgroud)