NSString componentsSeparatedByString

时间:2012-01-18 06:44:34

标签: iphone nsstring

我有一个来自服务器的字符串。我正在识别一个特定的子字符串,然后在该子字符串处断开主字符串。

NSString *string = /* getting from server */;
NSString *strAddress = /* Substring of string */;
NSArray *arr = [string componentsSeparatedByString:strAddress];
NSString *strBeforeAddress = [arr objectAtIndex:0];

strAddress之前有某些内容时,此功能完全正常。但在某些情况下,它完全给出了一个奇怪的结果。例如,

string = @"cxzcvxcv\n14, Beaven Dam Road\nVail, CO81657";
strAddress = @"14, Beaven Dam Road\nVail, CO81657";

我只在arr中得到一个对象,完整的字符串,我认为这是错误的。它应该将结果作为2个对象:cxzcvxcvblank object。但是,何时

string = @"14, Beaven Dam Road\nVail, CO81657";
strAddress = @"14, Beaven Dam Road\nVail, CO81657";

在这种情况下,数组arr有1个对象,即完整的字符串。有人可以解释一下这里发生了什么吗?

2 个答案:

答案 0 :(得分:12)

关于方法componentsSeparatedByString:

NSString Class Reference讨论
  

数组中的子字符串按照它们中的顺序显示   接收器。相邻的分隔符字符串出现时为空   结果中的字符串。同样,如果字符串开头或结尾   分隔符,第一个或最后一个子字符串分别为空。   例如,此代码片段:

     

NSString *list = @"Norman, Stanley, Fletcher";

     

NSArray *listItems = [list componentsSeparatedByString:@", "];

     

生成一个数组{ @"Norman", @"Stanley", @"Fletcher" }

     

如果列表以逗号和空格开头,例如", Norman, Stanley, Fletcher" - 数组包含以下内容:{ @"", @"Norman", @"Stanley", @"Fletcher" }

     

如果list没有分隔符 - 例如"Norman" - 数组包含   字符串本身,在本例中为{ @"Norman" }

两个测试用例的输出是:

NSString *string = @"cxzcvxcv\n14, Beaven Dam Road\nVail, CO81657";
NSString *strAddress = @"14, Beaven Dam Road\nVail, CO81657";
NSLog(@"%@",[string componentsSeparatedByString:strAddress]);

输出

(
    "cxzcvxcv\n",
    ""
)

正如所料。而对于第二种情况

NSString *string = @"14, Beaven Dam Road\nVail, CO81657";
NSString *strAddress = @"14, Beaven Dam Road\nVail, CO81657";
NSLog(@"%@",[string componentsSeparatedByString:strAddress]);

输出

(
    "",
    ""
)
再次,如预期的那样。我觉得这里没问题。

答案 1 :(得分:-2)

如果

 string = @"cxzcvxcv\n14, Beaven Dam Road\nVail, CO81657";
 strAddress = @"14, Beaven Dam Road\nVail, CO81657";

然后strBeforeAddress将是 - cxzcvxcv\n

如果

  string = @"14, Beaven Dam Road\nVail, CO81657";
  strAddress = @"14, Beaven Dam Road\nVail, CO81657";

然后strBeforeAddress将为nil