如何从NSString中获取每一行?

Rol*_*ien 7 macos cocoa objective-c

如果我有一个带有文本文件的NSString,如何获得一个NSString的NSArray,每个NSString包含一行文件.

在10.5中我这样做了:

NSArray* lines = [str componentsSeparatedByCharactersInSet: [NSCharacterSet newlineCharacterSet]];
Run Code Online (Sandbox Code Playgroud)

但这在10.4中不起作用,我的程序需要在10.4中工作.

同样,它需要使用\ r,\n和\ r \n行结尾.

e.J*_*mes 10

以下代码直接来自Apple关于段落和换行符的文档:

unsigned length = [string length];
unsigned paraStart = 0, paraEnd = 0, contentsEnd = 0;
NSMutableArray *array = [NSMutableArray array];
NSRange currentRange;
while (paraEnd < length)
{
    [string getParagraphStart:&paraStart end:&paraEnd
    contentsEnd:&contentsEnd forRange:NSMakeRange(paraEnd, 0)];
    currentRange = NSMakeRange(paraStart, contentsEnd - paraStart);
    [array addObject:[string substringWithRange:currentRange]];
}
Run Code Online (Sandbox Code Playgroud)

我不是100%肯定它是否适用于10.4


Vin*_*ary 6

使用包含字符串中的所有行 enumerateLinesUsingBlock:

[yourString enumerateLinesUsingBlock:^(NSString * _Nonnull line, BOOL * _Nonnull stop) {
    //line
}];
Run Code Online (Sandbox Code Playgroud)

宣言

- (void)enumerateLinesUsingBlock:(void (^)(NSString *line,
                                   BOOL *stop))block
Run Code Online (Sandbox Code Playgroud)

参数

block 为枚举执行的块.

该块有两个参数:

line枚举字符串的当前行.该行仅包含该行的内容,没有行终止符.

stop块的可用于通过设置*stop = YES来停止枚举的布尔值的引用; 它不应该触摸*否则停止.

可用性可用的OS 10.6iOS 4.0以后.


Hen*_*ong 5

我将首先用"\n"替换所有"\ r",然后将所有"\n \n"替换为"\n",然后执行componentsSeparatedByString:@"\n".