【问题标题】:Removing \ from NSString (from escape sequences only)从 NSString 中删除 \(仅从转义序列中)
【发布时间】:2014-08-11 06:53:11
【问题描述】:

我在 SO 上尝试(搜索)各种可能的解决方案,但徒劳无功。他们中的大多数只是简单地替换所有出现的反斜杠,并且不尊重本应不受影响的反斜杠。

例如,如果我有一个 嗨,那就是我。你好吗?,应该是嗨,是我。你好吗?。但是,如果有人试图通过 ASCII 艺术来发挥创意,比如

\\// \\// \\//

//\\ //\\ //\\

(哇,即使如此,我也不会让我按原样添加文本,上面的文本需要额外的反斜杠才能正确显示。)

我不能使用[myString stringByReplacingOccurrencesOfString:@"\\" withString:@""];,因为它将替换所有反斜杠。我不想那样。

我希望字符串按原样显示。

注意:此处讨论的字符串是从 Web 服务作为 JSON 接收的 NSDictionarys 中的值。用于聊天客户端等服务,因此正确处理文本很重要。

超重要提示:我愿意接受所有想法,例如库函数、正则表达式、人类牺牲,只要能完成工作。

【问题讨论】:

  • 您在 NSLog 语句中看到的反斜杠字符在您的数据中实际上不存在的赌注是什么?我建议您发布一个示例并描述您是如何创建它的。
  • 请记住,如果我编码@"Some string \n And another",则字符串中没有反斜杠字符(即使打印字符串时可能会出现反斜杠)。 (而且,是的,它变得非常混乱。)
  • \' 组合从何而来?我想不是来自普通键盘。
  • 他正在处理 JSON,所以可能来自服务器。问题在于 (a) JSON 包含 JSON 解析器将正确删除的反斜杠,并且 (b) NSLog 语句将显示不存在的反斜杠。

标签: ios objective-c nsstring


【解决方案1】:

试试这个……我不明白你的问题,但它可能对你有帮助,我想是的

- (void)remove:(NSString*)str
{
    NSString* const pattern = @"(\"[^\"]*\"|[^, ]+)";

    NSRegularExpression *regex = [[NSRegularExpression alloc] initWithPattern:pattern
                                                                      options:0
                                                                        error:nil];

    NSRange searchRange = NSMakeRange(0, [str length]);
    NSArray *matches = [regex matchesInString:str
                                      options:0
                                        range:searchRange];

    for (NSTextCheckingResult *match in matches) {
        NSRange matchRange = [match range];
        NSLog(@"%@", [str substringWithRange:matchRange]);
    }
    NSLog(@"%@",str);
}

调用这个方法..

NSString*  str = @"Hi, it\'s me. How\'re you doing?";
    [self remove:str];

那么输出是

Hi, it's me. How're you doing?

【讨论】:

  • 这个方法不会替代任何东西。
  • 您的正则表达式失败。只返回每个单词(在 for-each 循环中)。
  • 在 for 循环之后添加本地字符串并分配字符串值。
  • 我将不得不测试我所有的案例,请给我一点时间。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-03
  • 1970-01-01
  • 1970-01-01
  • 2012-02-19
  • 2010-10-29
相关资源
最近更新 更多