2009-11-04 50 views
12

我使用的NSLog()打印選自由的NSString的一些表格數據和相關聯的整數是否可以使用格式字符串來對齊NSStrings數字可以?

假設我知道最長單詞的長度。

是否有使用格式字符串得到這樣列對齊的方式:

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

的原因,我問的格式化字符串是我希望的一個輕量級的方式格式化我的貧民窟調試輸出。

這裏是我的嘗試:

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

結果:

詞:樹等級:4

沒有根本的影響。

+1

haha​​ha +1貧民窟調試標記 – nall 2009-11-04 06:31:59

回答

15

以下似乎工作,但需要從您的NSString轉換爲C字符串。

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

不知道當試圖使用NSString時字段寬度被忽略的原因。

+0

是的,這很奇怪。 – 2009-11-04 05:27:29

+0

你有一個完整的字符串(例如1 Item1 6 0%6),那該怎麼做? – jongbanaag 2012-07-26 13:55:27

+0

@Anony Cramp:如果字符串長度更多,則不起作用....如果字符串長度大於列長度,如果要修剪字符串會怎樣... – Nit 2012-08-17 08:34:46

1

是的,就像printf

the documentationstringWithFormat:服從IEEE printf規範,它允許各種修改對個人的論點。該文檔包含該信息的有限子集,但鏈接到OpenGroup printf specification for Unix以提供完整信息(值得一讀,您可以使用格式說明符完成很多技巧)。

試試這個,讓正好在貼上什麼上面:

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

這裏是我如何格式化我的調試輸出的例子(我不使用NSLog,我包裝印刷標準錯誤得到文件和行):

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

如果單詞是「樹」,你會得到什麼?我得到「字:樹排名:4」這似乎沒有反應的列說明符。 – willc2 2009-11-04 03:49:48

+0

@ willc2:我用安東尼的信息編輯了我的答案,試試看。 – 2009-11-04 05:26:16

+0

@JedSmith,我可以知道如何在Swift中做到這一點嗎? TYIA – 2016-08-31 08:09:02

0

如果你這樣做了剛纔的答覆:

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

...你可以得到非ASCII字符編碼轉換問題... stringWithFormat似乎假定系統默認編碼,這仍然是MacRoman出於某種瘋狂的原因。你可以下降到stdlib級別 - 用sprintf將你所有的格式化到你自己的緩衝區中,然後你可以在創建NSString時控制編碼 - 但這很麻煩。如果有人知道一個方便的解決方法,我全是耳朵。

相關問題