0 から 4 桁の 10 進数で始まり、少量の不明な非 10 進数テキストで終わる文字列値が渡されます。先頭の 10 進数を「0」文字で 4 桁にする必要があります。「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];
私が説明したような文字列に可変量のパディングを追加するより良い方法はありますか?
編集:数値部分を切り落とし、パディングしてから追加し直すことを検討しましたが、コーナーケースの数は、その場での解決策が最適であることを示しているようです。