在iOS中解析引号和双引号问题

时间:2017-06-15 13:53:08

标签: objective-c parsing ios9 double-quotes xcode8

我有一个可以接受任何输入的textview,我需要分别将引号和双引号分析为'"。因此,如果我在文本视图中输入文字,例如"只需测试引号"输出应该是"Just testin'g quotes"下面是我的解析代码,到目前为止工作正常。

-(NSString *)parseQuotes:(NSMutableString *)str {
    [str replaceOccurrencesOfString:@"\"" withString:@""" options:0 range:NSMakeRange(0, [str length])];
    [str replaceOccurrencesOfString:@"'" withString:@"'" options:0 range:NSMakeRange(0, [str length])];

    return str;
}

所以,现在我的问题是如果我复制粘贴下面的文字

“只是测试报价”

"只需测试报价"

它给我一个像

这样的输出
“Just testin’g quotes” 

"Just testin'g quotes"

注意第一个没有解析,因为它有不同格式的引号和双引号。因此,我需要使用这些新引号(如

)复制相同的代码
    [str replaceOccurrencesOfString:@"“" withString:@""" options:0 range:NSMakeRange(0, [str length])];

    [str replaceOccurrencesOfString:@"”" withString:@""" options:0 range:NSMakeRange(0, [str length])];

    [str replaceOccurrencesOfString:@"’" withString:@"'" options:0 range:NSMakeRange(0, [str length])];

这有效,但我需要知道这是否是正确的方法?是否有可能出现不同类型的报价并破坏此代码?是否有更好的替代解决方案适用于所有类型的报价?

2 个答案:

答案 0 :(得分:0)

虽然潜在替换的集合可能会发生变化,但处理此问题的好方法是使用componentsSeparatedByCharactersInSet: Here's a good resource进行替换。

static NSCharacterSet *characterSet = [NSCharacterSet
    characterSetWithCharactersInString:@"\"''ʺ˝ˮ˶״᳓“”‟″‶〃""];
NSString *newStr = [[str componentsSeparatedByCharactersInSet:characterSet] componentsJoinedByString:@"""]

答案 1 :(得分:0)

首先定义映射:

NSMutableDictionary *mapping = [NSMutableDictionary dictionary];
mapping[@"\""] = @""";
mapping[@"”"] = @""";
...

for (NSString *key in mapping) {
    [str replaceOccurrencesOfString:key withString:mapping[key] options:0 range:NSMakeRange(0, [str length])];
}

这是一个易于扩展的解决方案。

您可能只想迭代字符并分别检查每个字符,而不是使用replaceOccurrencesOfString:withString:,以提高性能。