【问题标题】:NSString stringwithformat: Padding 2 strings with unknown lengthNSString stringwithformat:填充2个长度未知的字符串
【发布时间】:2013-06-02 18:49:14
【问题描述】:

我在处理 NSString stringWithFormat 时遇到问题...

问题如下:

首先,我有 2 个字符串。哪些是货币数量。

问题是我想用这两个创建 1 个字符串。

例如:

strF = [NSString stringWithFormat:@"First: %@   Second: %@", value1, value2];

我想知道是否可以在 First 和 Second 之间进行正确的填充。假设第一个字符串的长度总是不一样。

我想做这个:

First: 10,000.00         Second: 788.00
First: 10.00             Second: 788.00
First: 0.00              Second: 788.00
First: 100.00            Second: 788.00
First: 5.00              Second: 788.00

【问题讨论】:

标签: ios nsstring stringwithformat


【解决方案1】:

revision这里有一个更好的方法,使用 NSNumberFormatter:

首先像这样创建和配置您的格式化程序:

NSNumberFormatter * formatter = [[ NSNumberFormatter alloc ] init ] ;
[ formatter setFormatWidth:20 ] ;
[ formatter setPaddingCharacter:@" " ] ;
[ formatter setFormatterBehavior:NSNumberFormatterBehavior10_4 ] ;
[ formatter setNumberStyle:NSNumberFormatterDecimalStyle ] ;
[ formatter setMinimumFractionDigits:2 ] ;
[ formatter setMaximumFractionDigits:2 ] ;

创建格式化程序后,您的代码将变为:

strF = [ NSString stringWithFormat:@"First: %@ Second: %@", [ formatter stringFromNumber:value1 ], [ formatter stringFromNumber:value2 ] ] ;

您将获得(数千个)分隔符(在当前语言环境中)等。

我会在类方法中创建格式化程序(类似于+numberFormatterdispatch_once 块)你甚至可以通过一个类别将它添加到 NSNumberFormatter 并拥有类似于+[ NSNumberFormatter mySharedFormatter ] 的东西


您可以使用字段宽度说明符。它这样做:

NSString * value1String = ... from NSNumberFormatter to get commas inserted ;
[ NSString stringWithFormat:@"First: %20s Second: %0.2f", [ value1String UTF8String ], value2 ]

其中“20”是列的宽度。 (替换为所需的宽度)。还有其他选项,例如右对齐等。请man printf 了解更多信息。

如果你想添加逗号,NSNumberFormatter 应该可以做到。

(实际上,您可能也希望小数对齐,对吗?您可以尝试% 20.2f

【讨论】:

【解决方案2】:

好吧,你至少需要设置value1的最大长度,然后你可以做类似的事情

int maxLength = MAX(15, value1.length); // Prevent cropping anyway
NSString* formattedValue1 = [value1 stringByPaddingToLength:maxLength withString:@" " startingAtIndex:0]
strF = [NSString stringWithFormat:@"First: %@ Second: %@", formattedValue1, value2];

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-05-27
    • 2013-09-20
    • 1970-01-01
    • 2015-04-27
    • 2013-01-23
    • 1970-01-01
    • 1970-01-01
    • 2013-09-27
    相关资源
    最近更新 更多