3

我正在尝试连接一些 NSString,但想排除那些为空的。我正在使用这个解决方案:

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

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

谢谢。

4

3 回答 3

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];
}
于 2012-05-19T15:09:39.750 回答
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 世界,你会想要一个 final [array release].

于 2012-05-19T15:11:32.793 回答
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];
}
于 2012-05-19T15:12:46.350 回答