2012-04-26 100 views
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]; 

有没有更好的方式来一个可变量填充添加到像我所描述的一个字符串?

编辑:我认为砍掉数字部分,填充它,然后加回来,但角落案例的数量似乎表明,原位解决方案将是最好的。

回答

0

由于padding04之间,你可以这样做:

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

的想法是从包含四个元素的字符串砍掉零的权数。