拆分 NS 并保留拆分字符



我有一个字符串,里面有一些换行符,我需要拆分它。 目前我正在使用:

NSArray *a = [string componentsSeperatedByString:@"n"];

但是,这会删除所有新行字符。如何将这些元素保留为数组的一部分?

自己拆分字符串。

NSMutableArray *lines = [NSMutableArray array];
NSRange searchRange = NSMakeRange(0, string.length);
while (1) {
    NSRange newlineRange = [string rangeOfString:@"n" options:NSLiteralSearch range:searchRange];
    if (newlineRange.location != NSNotFound) {
        NSInteger index = newlineRange.location + newlineRange.length;
        NSString *line = [string substringWithRange:NSMakeRange(searchRange.location, index - searchRange.location)];
        [lines addObject:line];
        searchRange = NSMakeRange(index, string.length - index);
    } else {
        break;
    }
}
NSLog(@"lines = %@", lines);

据我所知,没有 API 可以做到这一点。一个简单的解决方案是从组件开始构建第二个数组,如下所示

NSString *separator = @".";
NSArray *components = [@"ab.c.d.ef.gh" componentsSeparatedByString:separator];
NSMutableArray *finalComponents = [NSMutableArray arrayWithCapacity:components.count * 2 - 1];
[components enumerateObjectsUsingBlock:^(id component, NSUInteger idx, BOOL *stop) {
    [finalComponents addObject:component];
    if (idx < components.count - 1) {
        [finalComponents addObject:separator];
    }
}];
NSLog(@"%@", finalComponents); // => ["ab", ".", "c", ".", "d", ".", "ef", ".", "gh"] 

效率不是很高,但除非处理非常多的组件,否则可能不是一个大问题。

最新更新