2012-01-22 39 views
1

我正在將* .srt字幕文件讀入NSString。此字符串的內容是這樣的:將NSString拆分爲空行的NSArray

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,其中每個元素包含這是關係到一個特定subtitle-「幀」,例如信息零元素應該是這樣的:

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

任何想法如何在一個優雅的方式完成這項任務?我嘗試使用方法

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

分割原始字符串,但這種方法無法檢測空白行..

感謝您的幫助!

TOBI

回答

6

如果[string componentsSeparatedByString:@"\n\n"]不起作用,則有兩種可能性:

  1. 你的文件包含MSDOS風格的換行符,這是\r\n。所以請嘗試分割@"\r\n\r\n"

  2. 你的空白行包含空格或製表符。你可以使用cat -e從shell中檢查這個。

+0

通過「\ r \ n \ r \ n」拆分完成了這項工作!非常感謝! –

+0

@ tobias.henn當答案有效時,接受該答案是一般慣例。 –

+0

嗨,理查德,我沒有意識到這一點!謝謝! –

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); 
+0

今天晚上我要去看看NSScanners!謝謝! –