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

@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 回答
0

您是否blankScore使用在控制台上打印过NSLog?实际上你的字符串是正确的,但是输出在行尾被修剪 - 这就是你看到它描述的原因。

于 2013-02-12T19:39:51.913 回答