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.是否可以将""作为一个对待?
谢谢
您可以使用众所周知的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)
| 归档时间: |
|
| 查看次数: |
598 次 |
| 最近记录: |