0

不変部分(「ボーナススコア:(+ 7%)」)と変化部分(「247,890」など)に別々のテキストオブジェクトがあります。別々なので、不変部分に数字を表示するスペースを残したいと思います。

私が最初に試したのは:

NSString* numberString = @"247,890";
NSString* blankScore = [@"" stringByPaddingToLength:[numberString length] withString: @" " startingAtIndex:0];
NSString* baseDisplay = [NSString stringWithFormat:@"BONUS SCORE: %@ (+7%%)", blankScore];

'blankScore'は正しい長さでしたが、結果のbaseDisplayは、blankScoreがある場所の周囲のスペースをトリミングしているように見えたため、表示される数値に対してスペースが小さすぎました。

次に、blankScoreを作成する別の方法を試しました。

NSString* blankScore = [numberString stringByReplacingCharactersInRange:NSMakeRange(0, [numberString length]) withString:@" "];

しかし、これは長さ1のblankScoreを返しました。

これらのNSStringメソッドを正しく理解していませんか?ドキュメントを確認したところ、これらのメソッドの理解はそこに書かれていることと一致しているようですが、baseDisplayに正しい数のスペースを設定できない理由はまだわかりません。

4

2 に答える 2

0

blankScoreを使用してコンソールに印刷しましたNSLogか?実際には文字列は正しいですが、出力は行末でトリミングされます。これが、説明どおりに表示される理由です。

于 2013-02-12T19:39:51.913 に答える
0

@H2CO3は正しい解決策にあります。次を使用する必要があります:NSString * baseDisplay = [NSString stringWithFormat:@ "BONUS SCORE:%@(+ 7 %%)"、numberString];

これをさらにうまく機能させるには、NSNumberFormatterを検討して、変更部分をbaseDisplayオブジェクトに挿入する前に正しくフォーマットすることをお勧めします。このようなもの:

NSNumber *changingNumber = [NSNumber numberWithDouble:247890];
NSNumberFormatter *correctFormat = [[NSNumberFormatter alloc] init];
[correctFormat setNumberStyle:NSNumberFormatterDecimalStyle];
[correctFormat setHasThousandSeparators:YES];
[correctFormat setUsesGroupingSeparator:YES];

NSString *numberString = [correctFormat stringFromNumber:changingNumber];
NSString *baseDisplay = [NSString stringWithFormat:@"BONUS SCORE: %@ (+7%%)", numberString];

このように、あなたがそれに投げる数に関係なく、それは正しく「1,234,456」または「34,567」を表示します。

編集:

私の答えへのコメントに基づいて、あなたは使用する必要があります:

stringByPaddingToLength:withString:startingAtIndex:

次のようになります。

NSString *templateString = @"BONUS SCORE:";
NSString *templateString2 = @"(+7%%)";
NSUInteger baseStringLength = [templateString length] + [numberString length];
NSString *spacedString = [templateString stringByPaddingToLength:baseStringLength withString:@" " startingAtIndex:0];
NSString *baseDisplay = [NSString stringWithFormat:@"%@%@", spacedString, templateString2];
于 2013-02-12T19:49:51.710 に答える