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];

line1は「contact1;12312312;John」です。

line2は "contact2;34243442;Bill" です。

line3のタイプは (_NSCFConstantString *) で、デバッガーに値が表示されません。

後で、この配列を tableView のデータ ソースとして使用するため、正しい配列数が必要です。

4

2 に答える 2

4

入力文字列には 2 つのセパレータがあるため、結果の配列には 3 つのエントリがあります

  1. 最初の前 \n
  2. \n の間
  3. 最後の\nの後

この場合、3 番目は空の文字列 (長さ 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"]];

もちろん、必要なのはこれらのクリーニング操作の 1 つだけであり、特定の入力データに合わせて両方を微調整できます。

于 2012-06-12T16:57:30.213 に答える