2009-11-04 47 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时控制编码 - 但这很麻烦。如果有人知道一个方便的解决方法,我全是耳朵。

相关问题