我正在尝试连接一些 NSString,但想排除那些为空的。我正在使用这个解决方案:
[NSString stringWithFormat:@"%@/%@/%@", three, two, one];
但是如果其中一个字符串为空怎么办?我想排除它。有任何想法吗?
谢谢。
我正在尝试连接一些 NSString,但想排除那些为空的。我正在使用这个解决方案:
[NSString stringWithFormat:@"%@/%@/%@", three, two, one];
但是如果其中一个字符串为空怎么办?我想排除它。有任何想法吗?
谢谢。
你可以这样做:
[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];
}
你可以有一个像
- (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]
.
你可以做一个循环并检查每个对象。
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];
}