Ist es möglich, Format-Strings zu verwenden NSStrings wie Zahlen auszurichten sein kann?

StackOverflow https://stackoverflow.com/questions/1671531

  •  13-09-2019
  •  | 
  •  

Frage

ich verwende NSLog () einige tabellarischen Daten zu drucken, bestehend aus einem NSString und einer zugehörigen integer .

Angenommen ich die Länge des längsten Wortes kennen.

Gibt es eine Möglichkeit mit Format-Strings diese Art von Spaltenausrichtung erhalten:

word:tree        rank:5  
word:frog        rank:3  
word:house       rank:2  
word:peppercorn  rank:2  
word:sword       rank:2  
word:antlion     rank:1  

Der Grund, ich frage Strings Formatierung wird Ich hoffe auf eine leichte Art und Weise mein Ghetto Debugging-Ausgabe zu formatieren.

Hier ist, was ich versucht:

NSString *word = @"tree";
NSUInteger rank = 4;
NSString *str = [NSString stringWithFormat:@"word:%-20@ rank:%u", word, rank];
NSLog(@"%@", str);

Ergebnis:

Wort: Baum Rang: 4

Keine Auswirkung auf allen.

War es hilfreich?

Lösung

Die folgende scheint zu funktionieren, erfordert aber Umwandlung von Ihrem NSString der C-Strings.

NSString *word = @"tree";
NSUInteger rank = 4;
NSString *str = [NSString stringWithFormat:@"word:%-20s rank:%u", [word UTF8String], rank];
NSLog(@"%@", str);

Sie wissen nicht, warum die Feldbreite ignoriert wird beim Versuch, eine NSString zu verwenden.

Andere Tipps

Ja, genau wie printf.

Nach die Dokumentation , gehorcht stringWithFormat: die IEEE printf Spezifikation, die alle Arten von Änderungen an den einzelnen Argumente ermöglicht. Die Dokumentation hat eine eingeschränkte Teilmenge dieser Informationen, aber sie verbinden mit der Opengroup printf Spezifikation für Unix der vollständigen Informationen geben (lesenswert, können Sie eine Menge Tricks mit dem Formatbezeich erreichen können).

Versuchen Sie dieses, genau das zu bekommen, was Sie oben eingefügt haben:

NSString *word = @"butterfly";
NSUInteger rank = 4;
NSString *str = [NSString stringWithFormat:@"word:%-11s rank:%u", [word UTF8String], rank];

Hier ist ein Beispiel dafür, wie ich meine Debugging-Ausgabe-Format (ich verwende NSLog nicht, ich Druck auf Standardfehler wickeln Datei und Linie zu bekommen, auch):

fprintf(stderr, "%s | %30s:%-5d | %s", [[[NSDate date] description] UTF8String],
    [fileName UTF8String], line, [body UTF8String]);

Wenn Sie etwas tun, wie die frühere Antwort:

NSString *word = @"tree";
NSUInteger rank = 4;
NSString *str = [NSString stringWithFormat:@"word:%-20s rank:%u", [word UTF8String], rank];
NSLog(@"%@", str);

... Sie Codierung-Konvertierungsprobleme für Nicht-ASCII-Zeichen bekommen können ... string scheint das System Standard-Kodierung zu übernehmen, die aus irgendeinem verrückten Grund noch MacRoman ist. Sie können bis auf das stdlib Niveau fallen - all deine Formatierung mit sprintf in Ihren eigenen Puffer, und dann können Sie die Codierung steuern, wenn ein NSString aus, dass die Schaffung - aber das ist umständlich. Wenn jemand eine praktische Abhilfe weiß, ich bin ganz Ohr.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top