2009-06-08 18 views
30

उद्देश्य सी में एक स्ट्रिंग को बाध्य कैसे कर सकता है। उदा मैं चाहता हूँ कि अगर मैं 6 के एक पूर्णांक मूल्य के रूप में 06पैडिंग स्ट्रिंग को छोड़कर

मैं stringByPaddingToLength: का उपयोग यह प्रदर्शित करने के लिए लेकिन ऐसा लगता है 60.

आपका मदद सही करने के लिए यह पैड बहुत सराहना कर रहा है।

उत्तर

20
+ (NSString *)formatValue:(int)value forDigits:(int)zeros { 
    NSString *format = [NSString stringWithFormat:@"%%0%dd", zeros]; 
    return [NSString stringWithFormat:format,value]; 
} 
+0

क्या होगा अगर मैं एक पूर्णांक की बजाय स्ट्रिंग के बाईं ओर 0s जोड़ना चाहता हूं? तो अगर मेरे पास हैलो मैं 000hello चाहते हैं? – hzxu

+0

धन्यवाद !!!!!)))) – Alex

+2

एक परिवर्तनीय प्रारूप बनाने के बजाय, क्यों न केवल चर फ़ील्ड लंबाई का उपयोग करें, उदा। '[एनएसएसटींग स्ट्रिंगविथफॉर्मैट: @"% 0 * डी ", शून्य, मूल्य];'? – dreamlax

76

यह एक पैड 10 शून्य के साथ छोड़ दिया।

NSString *padded = [NSString stringWithFormat:@"Padded left with zeros: %010d", 65]; 
+0

क्या 65 यदि एक NSString था? क्या एक प्रकार का रूपांतरण किए बिना इसे संभालने के लिए कोई फॉर्मेटर है? –

13

बेकार, लेकिन यह काम करेगा।

@implementation NSString (LeftPadding) 

- (NSString *)stringByPaddingTheLeftToLength:(NSUInteger)newLength withString:(NSString *)padString startingAtIndex:(NSUInteger)padIndex 
{ 
    if ([self length] <= newLength) 
     return [[@"" stringByPaddingToLength:newLength - [self length] withString:padString startingAtIndex:padIndex] stringByAppendingString:self]; 
    else 
     return [[self copy] autorelease]; 
} 

@end 

तो फिर तुम कर सकते हैं:

NSString *test1 = [@"6" stringByPaddingTheLeftToLength:10 withString:@"0" startingAtIndex:0]; 
// test1 = "0000000006" 

NSString *test2 = [@"asdf" stringByPaddingTheLeftToLength:10 withString:@"qwer" startingAtIndex:0]; 
// test2 = "qwerqwasdf" 

NSString *test3 = [@"More than ten characters" stringByPaddingTheLeftToLength:10 withString:@"bamboo" startingAtIndex:0]; 
// test3 = "More than ten characters" 

NSString *test4 = [test3 stringByPaddingTheLeftToLength:100 withString:test2 startingAtIndex:0]; 
// test4 = "qwerqwasdfqwerqwasdfqwerqwasdf...qwerqMore than ten characters" 
+0

यह बहुत अच्छा काम करता है जब "एस्ट्रिंग" इसके बजाय "स्वयं" होता है। धन्यवाद। – TPoschel

+1

बिल्कुल बेकार नहीं है! विशेष रूप से जब ऑब्जेक्ट को पैड किया जाना एक स्ट्रिंग है, संख्या नहीं। बीटीडब्ल्यू, 'startAtIndex' पैरामीटर अब और आवश्यक नहीं है। –

7

पुराना धागा, मुझे पता है, लेकिन यह छोड़ दिया पैड एक आसान तरीका है। मेरे पास यह मेरा यूटिल क्लास है। यदि आवश्यक हो तो आप इसे सही पैड पर अनुकूलित कर सकते हैं। सबसे अच्छा हिस्सा यह है कि यह जो भी पैडिंग आप चाहते हैं उसके साथ काम करता है।

+ (NSString *) leftPadString:(NSString *)s withPadding:(NSString *)padding { 
    NSString *padded = [padding stringByAppendingString:s]; 
    return [padded substringFromIndex:[padded length] - [padding length]]; 
} 

एआरसी और गैर-एआरसी अनुपालन। :)

इसे कॉल करने के लिए, [Util leftPadString:@"42" withPadding:@"0000"]; का उपयोग करें।

आप इसे [@"42" stringByLeftPadding:@"0000"] जैसे किसी भी आसान कॉल के लिए एनएसएसटींग पर एक श्रेणी में भी डाल सकते हैं।

दोनों आप 0042.

+0

धन्यवाद, और दाएं पैड स्ट्रिंग यहां किसी भी व्यक्ति के लिए है: - (एनएसएसटींग *) दाएं पैडस्ट्रिंग: (एनएसएसटींग *) एस के साथ पैडिंग: (एनएसएसटींग *) पैडिंग { एनएसएसटींग * पैडड = [एस स्ट्रिंगबैपेंडिंग स्ट्रिंग: पैडिंग]; वापसी [गद्देदार substringToIndex: [पैडिंग लंबाई]]; } – lppier

4
completness के लिए

देना (* प्लेसहोल्डर का उपयोग कर):

NSString *paddedNumberString = [NSString stringWithFormat:@"%0*d", amountOfZeros, numberNSInteger] 
संबंधित मुद्दे