错误的结果解析 objective-C 中的字符串使用 componentsSepardByString



>我正在尝试解析一个字符串文件字符串

"contact1;12312312;Johnncontact2;34243442;Billn"

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 行是"联系人 2;34243442;比尔"。

第 3 行的类型为 (_NSCFConstantString *),并且在调试器中不显示值。

稍后我使用此数组作为表视图的数据源,因此我需要正确的数组计数。

输入字符串有两个分隔符,因此生成的数组有三个条目

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

在本例中,第三个是空字符串(长度为 0 的 NSString)

来自 NS 文档

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

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

NSString *csvString = @"JoenJanenPauln";
// 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"]];

当然,您只需要这些清理操作之一,并且都可以对其进行调整以适合您的特定输入数据。

最新更新