我正在尝试将字符串拆分为NSArray,但是我遇到了忽略带有语音标记的字符串的问题。
例如
NSString *example = @"100 200 300 \"TEST ITEM\" 500";
NSArray *array = [example componentsSeparatedByString:@" "];
然而,阵列显然被创建为100,100,300,“Test,ITEM”,500。是否可以将“”作为一个处理?
由于
答案 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"]