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