3

いくつかのNSStringを連結しようとしていますが、nullであるものを除外したいと思います。私はこのソリューションを使用しています:

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

しかし、文字列の1つがnullの場合はどうなりますか?除外したいのですが。何か案は?

ありがとう。

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以外の世界にいる場合は、ファイナルが必要です[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 に答える