如何在NSString中留出一定数量的空格?

时间:2013-02-12 19:25:36

标签: objective-c replace nsstring space

我有不变部分的单独文本对象(即“奖励分数:(+ 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有正确的空格数。

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分: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];