stringByTrimmingCharactersInSet: - 不会使不允许的'%'跳闸?

时间:2015-06-04 12:29:39

标签: objective-c string cocoa

由于某些奇怪的原因,我的stringByTrimmingCharacterInSet:允许'%'通过。

为什么?

演示此问题的简单代码(意味着从文本中添加电话#):

    NSString * allowedSet = @"01234567890+-#";
    NSCharacterSet * disallowedSet =[[NSCharacterSet characterSetWithCharactersInString:allowedSet] invertedSet];

    in = @"+31%121212abc";
    out = [in  stringByTrimmingCharactersInSet:disallowedSet];

我原本期望输出

... In  : +31%121212abc
... Out : +31121212

但我得到了:

... In  : +31%121212abc
... Out : +31%121212

为什么?它似乎适用于所有其他字符。 '%'是特殊的 - 或者这是一个奇怪的URL相关问题吗?

1 个答案:

答案 0 :(得分:0)

修剪字符串;而不是替换字符。所以它忽略了那些不在开始或结束的人;即字符串中间的字符。使用stringByReplacingCharactersInSet:很好地解决了这个问题。

@interface NSString (inefficientStringByRemovingCharactersInSet)
- (NSString *)stringByRemovingCharactersInSet:(NSCharacterSet *)characterSet;
@end

@implementation NSString (inefficientStringByRemovingCharactersInSet)
- (NSString *)stringByRemovingCharactersInSet:(NSCharacterSet *)characterSet {
    return [[self componentsSeparatedByCharactersInSet:characterSet]
       componentsJoinedByString:@""];
}
@end