1

我正在尝试解析字符串fileString

"contact1;12312312;John\ncontact2;34243442;Bill\n"


NSArray* lines = [fileString componentsSeparatedByString:@"\n"];

在调试器数组3 个对象组成。为什么?

[行数] 必须是 2,但为什么它等于 3

NSString* line1 = [lines objectAtIndex:0];
NSString* line2 = [lines objectAtIndex:1];
NSString* line3 = [lines objectAtIndex:2];

第 1 行是“联系人 1; 12312312;约翰”。

第2行是“contact2;34243442;Bill”。

line3具有类型 (_NSCFConstantString *) 并且在调试器中不显示值。

后来我使用这个数组作为tableView的数据源,所以我需要一个正确的数组计数。

4

2 回答 2

4

输入字符串有两个分隔符,因此结果数组有三个条目

  1. 在第一个 \n 之前
  2. \n之间
  3. 在最后一个 \n 之后

在这种情况下,第三个是一个空字符串(长度为 0 的 NSString)

来自NSString 文档

同样,如果字符串以分隔符开头或结尾,则第一个或最后一个子字符串分别为空。

于 2012-06-12T16:18:18.323 回答
2

如果您想在将数组用作数据源之前对其进行调整,有几种简单的方法可以清理数据,例如:

NSString *csvString = @"Joe\nJane\nPaul\n";

// Cleaning by removing last newline
csvString = [csvString stringByReplacingOccurrencesOfString:@"\\n$" withString:@"" options:NSRegularExpressionSearch range:NSMakeRange(0, csvString.length)];

NSArray *lines = [csvString componentsSeparatedByString:@"\n"];

// Cleaning by removing all empty lines
lines = [lines filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"length > 0"]];

当然,您只需要其中一种清理操作,它们都可以进行调整以适应您的特定输入数据。

于 2012-06-12T16:57:30.213 回答