可变宽度字符串填充

时间:2012-04-26 02:06:28

标签: objective-c ios5

我正在传递一个字符串值,该值可能以0-4的十进制数字开头,并以一个很小但未知的非小数文本结束。我需要用“0”字符将前导十进制数字填充到四位数。如果我通过“abcd”,我会返回“0000abcd”。如果我通过“0xyz”,我会返回“0000xyz”。等等...

我使用以下代码来检测我需要做多少填充:

int padding = 0;
int strlen = [rawString length];
NSRange rng = [rawString rangeOfCharacterFromSet:[[NSCharacterSet decimalDigitCharacterSet] invertedSet]];

if (rng.length > 0 && rng.location < 4) // Characters were found at the end.
    padding = 4 - rng.location;
else if (rng.length == 0 && strlen < 4) // Only numbers were found.
        padding = 4 - strlen;

现在我可以准确地确定填充,我的挑战是以有效的方式添加填充。我可以做类似以下的事情,但这对我来说效率低下。

for (; padding > 0; padding--)
    rawString = [@"0" stringByAppendingString:rawString];

有没有更好的方法将变量填充量添加到字符串中,就像我描述的那样?

编辑:我考虑过切掉数字部分,填充它,然后再添加它,但是角落情况的数量似乎表明原位解决方案是最好的。

1 个答案:

答案 0 :(得分:0)

由于padding介于04之间,您可以这样做:

rawString = [[@"0000" substringFromIndex:4-padding] stringByAppendingString:rawString];

这个想法是从包含四个元素的字符串中删除正确数量的零。