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

的想法是從包含四個元素的字符串砍掉零的權數。