【问题标题】:componentsSeparatedByString backslash escapecomponentsSeparatedByString 反斜杠转义
【发布时间】:2017-05-30 11:15:28
【问题描述】:

我遇到了 NSString componentsSeparatedByString 方法的问题。

下面是一个例子:

(lldb) p [[@"TEST\\¦TEST\\WORKS" componentsSeparatedByString:@"¦"] objectAtIndex: 0]
(NSTaggedPointerString *) $13 = 0xa00005c545345545 @"TEST\"
(lldb) p [[@"TEST\\¦TEST\\WORKS" componentsSeparatedByString:@"¦"] objectAtIndex: 1]
(__NSCFString *) $14 = 0x000000017023f440 @"TEST\\WORKS"

在我看来,最后带有转义反斜杠的子字符串会丢失反斜杠\\ 的正确转义。

在上面的示例中,我期望在第一种情况下得到一个 NSString (@"TEST\\"),而不是得到一个最后一个字符未正确转义的 NSTaggedPointerString (@"TEST\")。

我是做错了什么还是假设该方法应该以不同的方式工作?

我之所以问这个问题,是因为我必须在 NSPredicate 中使用子字符串,并且出现以下异常:

NSArray *explodePair = [pair componentsSeparatedByString:@"¦"];
NSString *colorCode = [explodePair count] > 0 ? [explodePair firstObject] : nil;
[self.colors filteredOrderedSetUsingPredicate:[NSPredicate predicateWithFormat:@"code LIKE %@", colorCode]]

由于未捕获的异常而终止应用程序 'NSInvalidArgumentException',原因:'反斜杠是通配符 char,并且不能以未转义的形式出现在字符串的末尾。'

【问题讨论】:

  • 你的问题不清楚
  • 添加有关您期望什么以及它给您什么的信息。
  • 感谢反馈,我更新了问题
  • @"TEST\\¦TEST\\WORKS" 创建字符串 'TEST\¦TEST\WORKS'。

标签: objective-c nsstring


【解决方案1】:

这里的问题是 NSTaggedPointerString__NSCFString 在 LLDB 输出中以不同的方式显示单个反斜杠,令人困惑。

您可以使用po 而不是p 以相同的方式查看它们。

您还可以在 NSString 上使用length 方法来检查NSTaggedPointerString 显示为\__NSCFString 显示为\\ 的内容实际上只是一个字符。

【讨论】:

    猜你喜欢
    • 2015-05-19
    • 2015-09-21
    • 2011-11-09
    • 2017-04-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多