一般来说,为了方便传值,我们会约定好某个符号,将多段文本拼接成一个字符串,然后由前端自行拆分解析。然而,总有那么几种奇葩,给的数据穿插了各种符号,然后告诉你每个符号间都是一个段,自行理解。What?!这是认真的吗?
当然,有时候这就是认真的,所幸系统不仅提供了以一段连续字符切割字串的方法,同时也提供了以某些个零散的字符切割字串的方法。
举个例子,数据为:We,Are!Family 希望得到的数据是[We,Are,Family]
NSString *string = @"We,Are!Family";
NSMutableArray *tempArray = [NSMutableArray arrayWithArray:[string componentsSeparatedByCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@",!"]]];//@",!"以,或!切割,而不是把,!连在一起当成一个整体进行切割
结果:
(
We,
Are,
Family
)
然而这个方法存在一个小小的弊端,当切割符相连或者为字串的最后一位时,会出现数组中存在空字串为对象的情况,如下:
/**切割符在字串最后一位时*/
NSString *string = @"We,Are!Family.";
NSMutableArray *tempArray = [NSMutableArray arrayWithArray:[string componentsSeparatedByCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@",!."]]];
结果:
(
We,
Are,
Family,
""
)
/**切割符相连时*/
NSString *string = @"We,Are!+Family."; //这里!+相连,中间将出现一个空字串对象
NSMutableArray *tempArray = [NSMutableArray arrayWithArray:[string componentsSeparatedByCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@",!+."]]];
结果:
(
We,
Are,
"",
Family,
""
)
这个时候就和我们所需要的数据有点出入了,有时候空字串会影响统一的处理,我们就必须将所有空字串的对象删除,其实也很简单,直接用系统自带的可变数组删除对象的方法即可:
[tempArray removeObject:@""];//将数组中为@""的对象全部删除
这个时候,就可以将这个流程封装成一个方法,方便调用:
/**建议放在NSString的拓展类里,写法如下*/
-(NSArray *) componentsSeparatedBySetCharacters:(NSString *)setSep
{
NSMutableArray *tempArray = [NSMutableArray arrayWithArray:[self componentsSeparatedByCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:setSep]]];
[tempArray removeObject:@""];
return [NSArray arrayWithArray:tempArray];
}
/**也可以封装在工具类里,可用类方法,写法如下*/
+(NSArray *) string:(NSString *)string componentsSeparatedBySetCharacters:(NSString *)setSep
{
NSMutableArray *tempArray = [NSMutableArray arrayWithArray:[string componentsSeparatedByCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:setSep]]];
[tempArray removeObject:@""];
return [NSArray arrayWithArray:tempArray];
}
网友评论