2012-12-04 5 views
9

私は、ユーザーオプションの精度やパディングによって多少ユーザーを定義することができるように、動的な文字列形式を作成しようとしてきました。NSStringのstringWithFormatとダイナミックな文字列形式

例では、24時間の時間フォーマットにおけるような先行ゼロのパディングを含みます。通常の時間形式では、時間は1桁で表すことができます。これは、文字列形式で表現されています。私が達成したい何

...stringWithFormat:@"Hour: %02i", hour // leading zero padded 

...stringWithFormat:@"Hour: %i", hour  // not leading zero padded 

@""または@"02"のいずれかを含む変数を持っており、その変数は、間のフォーマット文字列で提示することです%およびi

私は実験のカップルを行っていると、ちょうどこの操作を行うように見えることはできません、それはstringWithFormatでは不可能だと考え始めています。

私が試してみた:

...stringWithFormat:@"Hour: %%@i", padding, hour

...stringWithFormat:@"Hour: %@%i", padding, hour

などを。

アイデア?

+0

?この場合は –

+0

、それは単なる整数です – Madivad

答えて

33

これを行うには良い方法があります。 lengthがしたい桁数がある

... stringWithFormat:@"Hour: %0*i", length, hour]; // note the asterisk 

。必要に応じて先行ゼロと2の長さを取得するために2を使用して、何の先行ゼロを取得しないように1を使用してください。

NSString *dynFmt = [NSString stringWithFormat:@"Hour: %%%@i", padding]; 
NSString *res = [NSString stringWithFormat:dynFmt, hour]; 
+1

なぜdownvoteですか?どうしましたか? – rmaddy

+0

私に正しいと思われる –

+0

ありがとう@rmaddy +1の '*'は、私が後にしたことと、コードの一行で完璧に動作します:-) – Madivad

4

利用二つのステップ:

NSString* hourString=nil; 
    if(...){ 
     hourString=[NSString stringWithFormat:@"%i", hour]; 
    }else{ 
     hourString=[NSString stringWithFormat:@"%02i", hour]; 
    } 
    NSString* result=[NSString stringWithFormat:@"Hour: %@", hourString]; 

次は悪い習慣と考えられている:それはクラッカー攻撃の多くの種類で使用できる変数formatStringのを、持っていることは非常に危険ですので、

NSString* formatString=nil; 
    if(...){ 
     [email protected]"Hour: %i"; 
    }else{ 
     [email protected]"Hour: %02i"; 
    } 
    NSString* result=[NSString stringWithFormat:formatString, hour]; 

-1

私はあなたがそれを使用し、その後、完全に独立した段階で、あなたのフォーマットを構築することができると思う:あなたはもともとあなたは二つのステップでそれを行う必要がしようとしたものを解決する - FYI

。また、%のうちの1つをエスケープしてリテラルにすることを忘れないでください。

NSString *format = [NSString stringWithFormat:@"%%%@i", padding]; 
NSString *result = [NSString stringWithFormat:@"Hour: %@", format]; 

更新:おっとマディの答えは私に問題が指摘:%をエスケープするために、あなたは、ない\%を%%使用する必要があります。回答が更新されました。変数iの値がどうあるべきか

+2

ここで、あなたは 'hour'値を提供していますか? – rmaddy

関連する問題