textbozo__foo!!bar.baz
の場合、これを含む NSString を に分割する方法は(bozo, foo, bar, baz)
?
つまり、文字列 (デリミタ) と で構成要素に__
区切り!!
ます.
。
textbozo__foo!!bar.baz
の場合、これを含む NSString を に分割する方法は(bozo, foo, bar, baz)
?
つまり、文字列 (デリミタ) と で構成要素に__
区切り!!
ます.
。
NSCharacterSet を使用して文字列を分割できます。これを試して
NSString *test=@"bozo__foo!!bar.baz";
NSString *sep = @"_!.";
NSCharacterSet *set = [NSCharacterSet characterSetWithCharactersInString:sep];
NSArray *temp=[test componentsSeparatedByCharactersInSet:set];
NSLog(@"temp=%@",temp);
NSString *text = @"bozo__foo!!bar.baz";
NSArray *split1 = [text componentsSeparatedByString:@"__"];
NSArray *split2 = [[split1 lastObject] componentsSeparatedByString:@"!!"];
NSArray *split3 = [[split2 lastObject] componentsSeparatedByString:@"."];
NSLog(@"%@, %@, %@, %@", split1[0], split2[0], split3[0], split3[1]);
より機能的な解決策は-componentsSeparatedByString:
、以前のセパレーターの適用中に導出された各コンポーネントに対して再帰的に適用することです。
NSString カテゴリ
- (NSMutableArray<NSString *> *)gvr_componentsSeparatedByStrings:(NSArray<NSString *> *)separators {
if (separators.count == 0) {
return [NSMutableArray arrayWithObject:self];
}
NSString *separator = [separators firstObject];
NSArray *reducedSeparators = [separators gvr_arrayByRemovingFirstObject];
NSArray *components = [self componentsSeparatedByString:separator];
NSMutableArray *result = [NSMutableArray new];
for (NSString *component in components) {
NSMutableArray *subResult = [component gvr_componentsSeparatedByStrings:reducedSeparators];
[result addObjectsFromArray:subResult];
}
return result;
}
NSArray カテゴリ
- (NSArray *)gvr_arrayByRemovingFirstObject {
NSMutableArray *result = [NSMutableArray new];
for (NSInteger i = 1; i < self.count; i++) {
[result addObject:self[i]];
}
return [result copy];
}