我有一个可以接受任何输入的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])];
这有效,但我需要知道这是否是正确的方法?是否有可能出现不同类型的报价并破坏此代码?是否有更好的替代解决方案适用于所有类型的报价?
答案 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:
,以提高性能。