连接可能为nil的字符串的最佳方法是什么

时间:2015-07-08 00:53:19

标签: objective-c nsstring concatenation

您好我正在尝试连接一些可能为零的字符串变量。具体来说,我正在接受联系人的头衔,名字和姓氏,并希望收集最好的名字,即John Smith博士,而不会在结果中得到任何空值。

如果我只是这样做:

NSString *title = contact.title;
NSString *first = contact.first;
NSString *last = contact.last;
NSString *bestName = [NSString stringWithFormat: @"%@ %@ %@", title, first,last];

...如果它们中的任何一个为null,我在结果中得到一个(null)。

任何人都可以建议只有在值不为空时才包含有效代码吗?

感谢您的任何建议。

3 个答案:

答案 0 :(得分:4)

对于每个字符串组件,只有在它为非零时才将其添加到NSMutableArray。然后在数组上使用[array componentsJoinedByString:" "]

Objective C - How to concatenate an entire array of strings?

或者,您可以执行以下操作,这仍然会留下额外的空格,可能并不理想。对于你的每个字符串,你要连接:

NSString *prop = obj.prop == nil ? @"" : obj.prop

答案 1 :(得分:1)

虽然rikkigibson的答案是正确的,但语法可以简化为

NSString *prop = obj.prop?:@"";

所以在这种情况下,您可以像这样格式化字符串:

NSString *bestName = [NSString stringWithFormat: @"%@ %@ %@", title?:@"", first?:@"",last?:@""];

打印空字符串代替"(null)"。

答案 2 :(得分:0)

只是想补充一下Rikki Gibson的答案,有时有用的是针对这些情况利用NSArray中的nil-terminate初始化方法,例如:

NSString *bestName = [[NSArray arrayWithObjects:contact.title, contact.first, contact.last, nil] componentsJoinedByString:@" "];

那么任何对象是否为nil都没关系,它只会终止列表。因此,您将确保1)它不会崩溃,以及2)没有添加额外的空间。 但是,明显的缺点是,如果标题为nil,则不会附加第一个和最后一个标题...但是,如果可以接受的话,此方法非常健壮和简单。