2013-02-12 8 views
5

Ich möchte in der Lage sein, eine Zeichenfolge mit Leerzeichen rechts ausrichten. Ich muss in der Lage sein, die stringWithFormat: Methode zu verwenden.Wie pad ich eine Zeichenfolge mit stringWithFormat richtig

Bisher habe ich das empfohlene Format versucht und es scheint nicht zu funktionieren: [NSString stringWithFormat:@"%[email protected]",@"test"].

Ich würde erwarten, dass dies eine Zeichenfolge zurückgibt, die sechs Leerzeichen gefolgt von "Test" hat, aber alles, was ich bekomme, ist "Test" ohne Leerzeichen.

+0

Für right * padding * Im Allgemeinen nur eine lange Reihe von Leerzeichen anhängen und dann auf die gewünschte Länge abschneiden. Für rechts * Ausrichtung * können Sie etwas ähnliches tun, nur vom gegenüberliegenden Ende abgeschnitten. –

Antwort

4

Es scheint, dass stringWithFormat die Größenanforderungen des Formatbezeichners %@ ignoriert. Allerdings funktioniert %s Spezifizierer richtig:

NSString *test = @"test"; 
NSString *str = [NSString stringWithFormat:@"%10s", [test cStringUsingEncoding:NSASCIIStringEncoding]]; 
NSLog(@"'%@'", str); 

Dieser druckt ' test'.

+2

Da 'NSString' über jedes Unicode-Zeichen verfügen kann, wäre es besser,' [test UTF8String] 'anstelle von ASCII zu verwenden. – rmaddy

+0

Das hat bei mir funktioniert. Irgendwelche Ideen, warum es nicht mit '% @' funktioniert? – zachzurn

+1

@zachzurn Es ist eine Schande, dass Apples Implementierung des Formatbezeichners '% @' die Standardmodifikatoren aus der IEEE-Spezifikation für '% s' nicht berücksichtigt. Obwohl dies eine einfache Problemumgehung ist. Natürlich wäre eine allgemeinere Lösung, die mit jedem Objekt funktioniert, die Verwendung von '[[someObject description] UTF8String]'. – rmaddy

3

Es ist C-Stil-Formatierung. % nd bedeutet, dass die Breite n ist.

Überprüfen Sie den folgenden Code.

NSLog(@"%[email protected]",[NSString stringWithFormat:@"%[email protected]",@"test"]); 
NSLog(@"%@",[NSString stringWithFormat:@"  %@",@"test"]); 
NSLog(@"%[email protected]", @"test"); 
NSLog(@"%10s", [@"test" cStringUsingEncoding:[NSString defaultCStringEncoding]]); 
NSLog(@"%10d", 1); 

NSString *str = @"test"; 
int padding = 10-[str length]; //6 
if (padding > 0) 
{ 
    NSString *pad = [[NSString string] stringByPaddingToLength:padding withString:@" " startingAtIndex:0]; 
    str = [pad stringByAppendingString:str]; 
} 
NSLog(@"%@", str); 
+0

Es ist so viel einfacher, '% s' statt'% @' zu verwenden. Konvertieren Sie einfach den 'NSString' in einen C-String mit' UTF8String'. '% @' berücksichtigt den Spezifizierer für die Breite. – rmaddy

+1

Sie können '[NSString string]' durch '@" "' ersetzen. – rmaddy

Verwandte Themen