删除"(null)"来自字符串,如果没有可用值

时间:2014-05-25 18:18:26

标签: ios string nsstring

有一个应用程序,我在其中显示用户在地址中的当前位置。问题是,如果例如邮政编码或管理区域不可用,则字符串将打印(null)该值应保留的位置 - 所有其他数据都在那里。

示例:

(null)第19号路

(null)孟买


我想知道的是,是否可以只有一个空格而不是(null)?

我目前的代码:

 _addressLabel.text = [NSString stringWithFormat: @"%@ %@\n%@ %@\n%@",
                                 placemark.subThoroughfare, placemark.thoroughfare,
                                 placemark.postalCode, placemark.locality,
                                  placemark.administrativeArea];

4 个答案:

答案 0 :(得分:5)

使用NSString方法

非常容易实现
- (NSString *)stringByReplacingOccurrencesOfString:(NSString *)target withString:(NSString *)replacement

例如,在使用所有(可能为nil)值填充_addressLabel.text字符串后,只需将所需字符串的出现替换为所需的字符串即可。例如,以下内容将解决您的问题。

_addressLabel.text = [NSString stringWithFormat: @"%@ %@\n%@ %@\n%@",
                                 placemark.subThoroughfare, placemark.thoroughfare,
                                 placemark.postalCode, placemark.locality,
                                  placemark.administrativeArea];
// that string may contain nil values, so remove them.

NSString *undesired = @"(null)";
NSString *desired   = @"\n";

_addressLabel.text = [_addressLabel.text stringByReplacingOccurrencesOfString:undesired
                                                                   withString:desired];

答案 1 :(得分:3)

使用NSMutableString,如果值不是[NSNull null]nil,请使用一些if语句向其附加字符串。

CLPlacemark *placemark = ...;
NSMutableString *address = [NSMutableString string];
if (placemark.subThoroughfare) {
    [address appendString:placemark.subThoroughfare];
}
if (...) {
    [address appendFormat:@"%@\n", ...];
}
// etc...
_addressLabel.text = address;

答案 2 :(得分:2)

使用此选项将null替换为空字符串

addressLabel.text = [NSString stringWithFormat: @"%@ %@\n%@ %@\n%@",
                             placemark.subThoroughfare?:@"", placemark.thoroughfare?:@"",
                             placemark.postalCode?:@"", placemark.locality?:@"",
                              placemark.administrativeArea?:@""];

答案 3 :(得分:1)

我相信更清洁(*)的解决方案是使用"?"这里的运算符,对于每个字符串值都是这样的:

而不是placemark.subThoroughfare写:

(placemark.subThoroughfare ? placemark.subThoroughfare : @"")

甚至更短:

(placemark.subThoroughfare ?: @"")

这将检查值是否为NULL(或nil) - 如果非零,则它将使用字符串的值,否则它将使用包含空格的字符串。

  • 它更干净,因为我的解决方案不依赖于如何打印NULL字符串,即如果它们在未来的OS版本中打印为(nil)而不是(null),那么我的解决方案仍然有效,布莱恩特雷西赢了。并非我认为这是一个问题,只是指出对于那些关心幕后发生的事情的人来说,这是一个更合适的问题解决方案。