Jak można przesunąć sznurek w lewo w obiektyw c. Np jeśli mam wartość całkowitą 6 I ma to być wyświetlane jako 06.Łańcuch wypychania w lewo
używam stringByPaddingToLength:
ale pads go w prawo jak 60.
Twoja pomoc jest mile widziane.
Jak można przesunąć sznurek w lewo w obiektyw c. Np jeśli mam wartość całkowitą 6 I ma to być wyświetlane jako 06.Łańcuch wypychania w lewo
używam stringByPaddingToLength:
ale pads go w prawo jak 60.
Twoja pomoc jest mile widziane.
+ (NSString *)formatValue:(int)value forDigits:(int)zeros {
NSString *format = [NSString stringWithFormat:@"%%0%dd", zeros];
return [NSString stringWithFormat:format,value];
}
Ten jeden pad pozostały z 10 zerami.
NSString *padded = [NSString stringWithFormat:@"Padded left with zeros: %010d", 65];
Co jeżeli 65 było NSString? Czy istnieje formater do obsługi tego bez konwersji typu? –
Nieporęczna, ale wykona zadanie.
@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
Następnie można zrobić:
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"
Działa to świetnie, gdy zamiast tego "aString" jest "self". Dzięki. – TPoschel
Nie Nieporadne! Zwłaszcza, gdy obiektem, który ma być wyściełany, jest ciąg, a nie liczba. BTW, parametr 'startingAtIndex' nie jest już potrzebny. –
stary wątek, wiem, ale jest to wygodny sposób do lewej pad. Mam to moją klasę Util. W razie potrzeby możesz go dostosować do prawego padu. Najlepsze jest to, że działa z dowolnym dopełnieniem, jakiego chcesz.
+ (NSString *) leftPadString:(NSString *)s withPadding:(NSString *)padding {
NSString *padded = [padding stringByAppendingString:s];
return [padded substringFromIndex:[padded length] - [padding length]];
}
Zgodny z ARC i nie ARC. :)
Aby się z nią połączyć, użyj [Util leftPadString:@"42" withPadding:@"0000"];
.
Można również umieścić go w kategorii na NSString na jeszcze łatwiejsze połączenie, takie jak [@"42" stringByLeftPadding:@"0000"]
.
Zarówno daje 0042.
Dziękuję, a prawy ciąg znaków jest tutaj dla każdego, kto chce: - (NSString *) rightPadString: (NSString *) s withPadding: (NSString *) padding { NSString * padded = [s stringByAppendingString: padding]; return [padded substringToIndex: [długość wypełnienia]]; } – lppier
dla kompletności (używając *
zastępczy):
NSString *paddedNumberString = [NSString stringWithFormat:@"%0*d", amountOfZeros, numberNSInteger]
Co zrobić, jeśli chcę dodać 0 z lewej strony łańcucha zamiast liczby całkowitej? Więc jeśli mam cześć, chcę 000hello? – hzxu
Dziękuję !!!!!))))) – Alex
Zamiast tworzyć format zmiennej, dlaczego nie wystarczy użyć zmiennej długość pola, np. '[NSString stringWithFormat: @"% 0 * d ", zera, wartość];'? – dreamlax