通过空行将NSString拆分为NSArray

时间:2012-01-22 18:26:10

标签: objective-c parsing nsstring

我正在将* .srt字幕文件读入NSString。此字符串的内容如下所示:

1
00:00:20,000 --> 00:00:24,400
Altocumulus clouds occur between six thousand

2
00:00:24,600 --> 00:00:27,800
and twenty thousand feet above ground level.

我正在寻找一种优雅的解决方案,将此字符串拆分为NSArray,其中每个元素包含与一个特定字幕相关的信息 - “帧”,例如第0个元素看起来像这样:

1
00:00:20,000 --> 00:00:24,400
Altocumulus clouds occur between six thousand

任何想法如何以优雅的方式完成这项任务?我尝试使用方法

拆分原始字符串
[string componentsSeparatedByString:@"\n\n"];

但是这种方法无法检测到空行..

感谢您的帮助!

TOBI

3 个答案:

答案 0 :(得分:6)

如果[string componentsSeparatedByString:@"\n\n"]不起作用,则有两种可能性:

  1. 您的文件包含MSDOS样式的换行符,\r\n。因此,请尝试拆分@"\r\n\r\n"

  2. 您所谓的空白行包含空格或制表符。您可以使用cat -e从shell中检查此内容。

答案 1 :(得分:4)

我建议改用NSScanner。它更灵活,您不必担心您的换行符是Windows还是Unix样式以及空行是否包含任何空格。这是一个例子:

NSMutableArray *lines = [NSMutableArray array];
NSString *s = @"foo\n\nbar\r\n  \t  \r\nbaz"; //intentionally mixed line breaks
NSScanner *scanner = [NSScanner scannerWithString:s];
while (![scanner isAtEnd]) {
    [scanner scanCharactersFromSet:[NSCharacterSet newlineCharacterSet] intoString:NULL];
    NSString *line = nil;
    [scanner scanUpToCharactersFromSet:[NSCharacterSet newlineCharacterSet] intoString:&line];
    if (line) {
        [lines addObject:line];
    }
}
NSLog(@"%@", lines);

答案 2 :(得分:0)

根据http://en.wikipedia.org/wiki/SubRip,换行符是CRLF,即\r\n