我知道%%方法逃生%,但它不工作:(。在Objective-C
与NSLog的
NSLog(@"%%5B hello %%5D");
打印
%5B你好%5D
但与NSString
个NSString *str = [NSString stringWithFormat:@"%%5B %@ %%5D",@"hello"]; NSLog(str);
打印
5个招呼68233204
为什么?
我知道%%方法逃生%,但它不工作:(。在Objective-C
与NSLog的
NSLog(@"%%5B hello %%5D");
打印
%5B你好%5D
但与NSString
个NSString *str = [NSString stringWithFormat:@"%%5B %@ %%5D",@"hello"]; NSLog(str);
打印
5个招呼68233204
为什么?
这是因为你遗漏了一行代码。在你stringWithFormat:
版本,你可能有类似
NSString *str = [NSString stringWithFormat:@"%%5B5%%5D"];
NSLog(str);
问题是你现在已经在字符串中的双解释格式的字符。请记住,NSLog()
和+[NSString stringWithFormat:]
的第一个参数是格式字符串,其中%
字符是专门处理的。在这两种情况下,您都可以使用实际格式字符串轻松保留字符串的原始版本(并提前除去重复的%),如
NSLog(@"%@", @"%5B%5D");
您确实需要使用stringWithFormat:
,如果你不打算在任何参数传递,你应该能够只使用
NSString *str = @"%%5B%%5D";
但至于“为什么”,你遇到的现象发生,我不确定...尝试传递一个参数,看看它是否仍然发生。也许有一个错误,当没有参数传递?
根据this后您正确地转义它。
String format specifiers document说你也是这么做的。
谢谢您的回答:),但我想通过一个论点。我已更新我的示例。 – Daniel 2011-04-26 17:47:40
注意:通过NSLog调用('NSLog(str);')应该总是使用格式说明:'NSLog(@“%@”,str);' – justin 2011-04-26 17:48:46
就是这样!谢谢:D – Daniel 2011-04-26 17:50:43