我有一个来自服务器的字符串。我正在识别一个特定的子字符串,然后在该子字符串处断开主字符串。
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个对象:cxzcvxcv
和blank object
。但是,何时
string = @"14, Beaven Dam Road\nVail, CO81657";
strAddress = @"14, Beaven Dam Road\nVail, CO81657";
在这种情况下,数组arr
有1个对象,即完整的字符串。有人可以解释一下这里发生了什么吗?
答案 0 :(得分:12)
关于方法componentsSeparatedByString:
数组中的子字符串按照它们中的顺序显示 接收器。相邻的分隔符字符串出现时为空 结果中的字符串。同样,如果字符串开头或结尾 分隔符,第一个或最后一个子字符串分别为空。 例如,此代码片段:
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
。