Objective c Split String Issue

时间:2013-11-21 17:44:22

标签: ios objective-c arrays split

我正在尝试将字符串拆分为NSArray,但是我遇到了忽略带有语音标记的字符串的问题。

例如

NSString *example = @"100 200 300 \"TEST ITEM\" 500";
NSArray *array = [example componentsSeparatedByString:@" "];

然而,阵列显然被创建为100,100,300,“Test,ITEM”,500。是否可以将“”作为一个处理?

由于

2 个答案:

答案 0 :(得分:5)

您可以使用a well known 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

你会这样使用它:

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

答案 1 :(得分:1)

这是一个NSString类别,它使用NSScanner将字符串拆分为搜索字词,尊重各种类型的引用对:"" '' {{ 1}} ‘’

用法:

“”

代码:

NSArray *terms = [@"This is my \"search phrase\" I want to split" searchTerms];
// results in: ["This", "is", "my", "search phrase", "I", "want", "to", "split"]