我正在传递一个字符串值,该值可能以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 :(得分:0)
由于padding
介于0
和4
之间,您可以这样做:
rawString = [[@"0000" substringFromIndex:4-padding] stringByAppendingString:rawString];
这个想法是从包含四个元素的字符串中删除正确数量的零。