在objective-c中逃脱%

时间:2011-04-26 17:32:32

标签: objective-c escaping

我知道%%方法,但它不起作用:(。

使用NSLog

 NSLog(@"%%5B hello %%5D");

打印

  

%5B hello%5D

但是使用NSString

NSString *str = [NSString stringWithFormat:@"%%5B %@ %%5D",@"hello"];
NSLog(str);

打印

  

5你好68233204

为什么?

2 个答案:

答案 0 :(得分:2)

这是因为你遗漏了一行代码。在您的stringWithFormat:版本中,您可能有类似

的内容
NSString *str = [NSString stringWithFormat:@"%%5B5%%5D"];
NSLog(str);

问题是你现在已经在字符串中加倍解释了格式字符。请记住,NSLog()+[NSString stringWithFormat:]的第一个arg是格式字符串,其中%字符是专门处理的。在这两种情况下,您都可以使用实际格式字符串轻松保留字符串的原始版本(并提前删除重复的%),如

NSLog(@"%@", @"%5B%5D");

答案 1 :(得分:1)

如果您不打算传递任何参数,则需要使用stringWithFormat:,您应该可以使用

NSString *str = @"%%5B%%5D";

但至于“为什么”,你正在经历的事情正在发生,我不确定......尝试传递参数,看看它是否仍然存在。没有参数传递时可能存在错误?

根据this帖子,你正确地逃避它。

String format specifiers document说你也是这样做的。