连接nsstring并排除空值

时间:2012-05-19 15:05:01

标签: iphone objective-c ios xcode nsstring

我试图连接几个NSStrings但是想要排除那些为空的。我正在使用这个解决方案:

[NSString stringWithFormat:@"%@/%@/%@", three, two, one];

但如果其中一个字符串为null怎么办?我想排除它。有任何想法吗?

感谢。

3 个答案:

答案 0 :(得分:7)

你可以这样做:

[NSString stringWithFormat:@"%@/%@/%@", three ?: @"", two ?: @"", one ?: @""];

或者更好的方法是拥有一个可变的字符串并构建它:

NSMutableString *string = [[NSMutableString alloc] initWithCapacity:0];
if (three) {
    [string appendFormat:@"%@/", three];
}
if (two) {
    [string appendFormat:@"%@/", two];
}
if (one) {
    [string appendFormat:@"%@/", one];
}

答案 1 :(得分:3)

你可以有一个像

这样的方法
- (NSString *)stringOrEmptyString:(NSString *)string
{
    if (string)
        return string;
    else
        return @"";
}

然后再做

[NSString stringWithFormat:@"%@/%@/%@", 
    [self stringOrEmptyString:three], 
    [self stringOrEmptyString:two], 
    [self stringOrEmptyString:one]];

<强>更新

或者,如果您在空白值时不想使用斜杠,则可以选择执行以下操作:

NSMutableArray *array = [[NSMutableArray alloc] init];

if (one)
    [array addObject:one];
if (two)
    [array addObject:two];
if (three)
    [array addObject:three];

然后你可以得到你的NSString结果:

[array componentsJoinedByString:@"/"]

当然,如果你处于非ARC世界,你需要一个最终[array release]

答案 2 :(得分:1)

你可以做一个循环并检查每个对象。

NSString *myString = [[NSString alloc] init];
NSArray *myObjects = [[NSArray alloc] initWithObjects:three,two,one,nil];
for(NSString *currentObject in myObjects) {
    if(![currentObject isEqualToString:@""]) myString = [NSString stringWithFormat:@"%@/%@",myString,currentObject];
}