Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/wordpress/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 连接可能为零的字符串的最佳方法是什么_Objective C_Nsstring_Concatenation - Fatal编程技术网

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

Objective c 连接可能为零的字符串的最佳方法是什么,objective-c,nsstring,concatenation,Objective C,Nsstring,Concatenation,嗨,我正在尝试连接一些可能为零的字符串变量。具体地说,我正在获取联系人的姓名、头衔,并希望在结果中不出现任何空值的情况下组合出尽可能最好的姓名,即John Smith博士 如果我只是这样做: NSString *title = contact.title; NSString *first = contact.first; NSString *last = contact.last; NSString *bestName = [NSString stringWithFormat: @"%@ %@

嗨,我正在尝试连接一些可能为零的字符串变量。具体地说,我正在获取联系人的姓名、头衔,并希望在结果中不出现任何空值的情况下组合出尽可能最好的姓名,即John Smith博士

如果我只是这样做:

NSString *title = contact.title;
NSString *first = contact.first;
NSString *last = contact.last;
NSString *bestName = [NSString stringWithFormat: @"%@ %@ %@", title, first,last];
…如果其中任何一个为空,则结果为空

有人能建议有效的代码只在值不为null时包含吗


感谢您的建议。

对于您的每个字符串组件,仅当其非nil时才将其添加到NSMutableArray。然后对数组使用[array componentsJoinedByString:]

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

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

对于每个字符串组件,仅当其非nil时才将其添加到NSMutableArray。然后对数组使用[array componentsJoinedByString:]

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

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

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

NSString *prop = obj.prop?:@"";
因此,在本例中,您可以按如下方式格式化字符串:

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

打印空字符串以代替null。

尽管Rikkibibson的答案是正确的,但语法可以简化为

NSString *prop = obj.prop?:@"";
因此,在本例中,您可以按如下方式格式化字符串:

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

要打印空字符串来代替null。

只想添加到Rikki Gibson的答案中,在这些情况下,有时利用NSArray中的nil terminate init方法很有用,如下所示:

NSString *bestName = [[NSArray arrayWithObjects:contact.title, contact.first, contact.last, nil] componentsJoinedByString:@" "];
那么不管任何对象是否为零,它只会终止列表。因此,您将确保1不会崩溃,2不会添加额外的空间。
然而,明显的缺点是,如果标题为零,则不会附加第一个和最后一个。。。但是如果你能接受这一点,这种方法非常健壮和简单。

我想补充一下Rikki Gibson的答案,在这些情况下,有时利用NSArray中的nil terminate init方法很有用,比如:

NSString *bestName = [[NSArray arrayWithObjects:contact.title, contact.first, contact.last, nil] componentsJoinedByString:@" "];
那么不管任何对象是否为零,它只会终止列表。因此,您将确保1不会崩溃,2不会添加额外的空间。
然而,明显的缺点是,如果标题为零,则不会附加第一个和最后一个。。。但是如果你能接受的话,这个方法是非常健壮和简单的。

应该是@,但正如我在回答中所说的,整个表达式可以写成NSString*prop=obj.prop?:@;我喜欢由字符串连接的数组组件,在本例中,它可能是一个空白。但是如何处理if not nil逻辑呢?if obj.prop!=nil array.addObjectobj.prop;应该是@,但正如我在回答中所说,整个表达式可以写成NSString*prop=obj.prop?:@;我喜欢由字符串连接的数组组件,在本例中,它可能是一个空白。但是如何处理if not nil逻辑呢?if obj.prop!=nil array.addObjectobj.prop;如果title为nil,您真的需要一个额外的前导空格吗?如果first为nil,您真的需要一个内部双空格吗?或者你真的想加入空格,忽略nil元素?如果title为nil,你真的想要一个额外的前导空格,或者如果first为nil,你真的想要一个内部双空格吗?或者你真的想加入空格,忽略nil元素吗?@Cristik,请定义行不通,因为NSLog@%@,[@[]componentsJoinedByString:@];作品唯一的问题是,正如我在回答中提到的,如果第一个对象是nil,那么它将是一个空字符串。对不起,我错过了回答中关于title为nil时会发生什么的免责声明。看起来您讨论了这个场景。@Cristik,请定义将不起作用,因为NSLog@%@,[@[]组件通过字符串连接:@];作品唯一的问题是,正如我在回答中提到的,如果第一个对象是nil,那么它将是一个空字符串。对不起,我错过了回答中关于title为nil时会发生什么的免责声明。看起来你涵盖了这个场景。