1

我收到了一个字符串值,该值可以以 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];

有没有更好的方法可以像我描述的那样向字符串添加可变数量的填充?

编辑:我考虑砍掉数字部分,填充它,然后将其添加回来,但极端情况的数量似乎表明原位解决方案是最好的。

4

1 回答 1

0

由于padding介于0和之间4,您可以这样做:

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

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

于 2012-04-26T02:09:18.073 回答