【问题标题】:Split NSString into NSArray by blank lines通过空行将 NSString 拆分为 NSArray
【发布时间】:2012-01-22 18:26:09
【问题描述】:

我正在将 *.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,其中每个元素都包含与一个特定字幕相关的信息 - “框架”,例如第零个元素如下所示:

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

任何想法如何以优雅的方式完成这项任务?我尝试使用方法拆分原始字符串

[string componentsSeparatedByString:@"\n\n"];

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

感谢您的帮助!

托比

【问题讨论】:

    标签: objective-c parsing nsstring


    【解决方案1】:

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

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

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

    【讨论】:

    • 按“\r\n\r\n”分割就可以了!非常感谢!
    • @tobias.henn 当一个答案有效时,一般的做法是接受这个答案。
    • 嗨,理查德,我不知道这一点!谢谢!
    【解决方案2】:

    我建议改用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);
    

    【讨论】:

    • 今晚我要研究 NSScanners!谢谢!
    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-24
      相关资源
      最近更新 更多