iOS:有没有办法检查 NSArray 对象是不是包含某个字符?

Posted

技术标签:

【中文标题】iOS:有没有办法检查 NSArray 对象是不是包含某个字符?【英文标题】:iOS: Is there a way to check if an NSArray object contains a certain character?iOS:有没有办法检查 NSArray 对象是否包含某个字符? 【发布时间】:2014-06-17 15:43:13 【问题描述】:

我需要一种方法来了解数组是否在其字符串对象中包含字符“@”。下面的代码显然不起作用,因为它检查对象是否只有 @ 符号,而不是检查对象是否包含 @ 符号。例如,如果用户拥有 test@test.com,我的 if 语句将不会检测到它。我需要查看用户是否有电子邮件。我尝试研究如何在 *** 上完成此任务,但没有运气。任何提示或建议将不胜感激。

if([answer containsObject:@"@"])
  /// do function.                 

【问题讨论】:

可能是NSPredicate 你的数组中有哪些对象? 如果对象是 NSString(如您的示例所示),您可以使用 rangeOfString: 检测子字符串。 NSString,抱歉没有指定。 【参考方案1】:

您可以检查 NSArray 是否包含带有containsObject 的对象。如果是表示为一个字符串的字符数组,那么代码很简单:

NSArray *array = @[@"a", @"b", @"c", @"d"];
BOOL contains = [array containsObject:@"c"];

没有像 'c' char 这样的标量类型的 NSArray 这样的东西,因为 NS 集合只包含对象。最接近字符数组的是NSString,它有多种方法可以告诉您是否存在字符。最简单的样子是这样的:

NSString *string = @"test@test.com";
NSRange range = [string rangeOfString:@"c"];
BOOL contains = range.location != NSNotFound;

【讨论】:

【参考方案2】:

你必须循环遍历数组中的每个 NSString 并检查它是否包含子字符串。

这个自定义方法展示了如何:

//assumes all objects in the array are NSStrings
- (BOOL)array:(NSArray *)array containsSubstring:(NSString *)substring 

    BOOL containsSubstring = NO;

    for (NSString *string in array) 

        if ([string rangeOfString:substring].location != NSNotFound) 
            containsSubstring = YES;
            break;
        
    
    return containsSubstring;

用法:

NSMutableArray *array = [[NSMutableArray alloc] initWithCapacity:3];
[array addObject:@"hi"];
[array addObject:@"yo"];
[array addObject:@"test@test.com"];

BOOL containsSubstring = [self array:array containsSubstring:@"@"];

【讨论】:

【参考方案3】:

您可以创建一个 NSArray 的自定义 Category 类并添加以下方法:

- (BOOL) containsCharacter:(NSString *) character

    BOOL characterFound = NO;
    for (id object in self)
    
        if ([object isKindOfClass:[NSString class]])
        
            NSRange range = [object rangeOfString:character];
            if (range.location != NSNotFound)
            
                characterFound = YES;
                break;
            
        
    

    return characterFound;

谢谢, 迈克尔

【讨论】:

也是一个不错的选择。要创建一个类别:文件 > 新文件 > Objective-C 类别 > 将类别名称设置为任何类型,然后为类选择 NSArray【参考方案4】:

我认为这是更好的方法 - 正如Larme 所说,使用谓词过滤您的数组。

试试这样的:

NSArray *answer = @[@"John Appleseed", @"john@apple.com", @"john@icloud.com", @"+14120123456", @"invalid@email", @"another@@@invalid.email"];
NSArray *filteredArray = [answer filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"SELF CONTAINS \"@\""]];
if (filteredArray.count > 0) 
    // Do something

filteredArray 将包含所有对象,其中包含 at-symbol:

john@apple.com,
john@icloud.com,
invalid@email,
another@@@invalid.email

另一种方法 - 是通过有效的电子邮件字符串过滤数组,而不仅仅是 at-symbol:

NSArray *answer = @[@"John Appleseed", @"john@apple.com", @"john@icloud.com", @"+14120123456", @"invalid@email", @"another@@@invalid.email"];
NSString *emailRegex = @"[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]2,4";
NSArray *filteredArray = [answer filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"SELF MATCHES %@", emailRegex]];
if (filteredArray.count > 0) 
    // Do something

filteredArray 将只包含与 email-mask 匹配的对象

john@apple.com,
john@icloud.com

【讨论】:

以上是关于iOS:有没有办法检查 NSArray 对象是不是包含某个字符?的主要内容,如果未能解决你的问题,请参考以下文章

如何判断对象是不是在 NSArray 中?

检查两个 NSArray 是不是包含彼此的对象 (NSManagedObject)

NSArray 中的 iOS sdk NSArray 查找和合并

有没有办法检查 iOS 设备是不是被锁定/解锁?

有没有办法检查我的应用程序是不是调用了 iOS 8 独有的任何方法?

有没有办法检查一个对象的所有孩子是不是都处于活动状态?