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

时间:2014-06-17 15:43:14

标签: ios objective-c if-statement nsarray

我需要一种方法来知道一个数组是否有字符" @"在其中一个字符串对象中。以下代码显然不起作用,因为它检查对象是否只有@符号而不是检查对象是否包含@符号。例如,如果用户有test@test.com,我的if语句将无法检测到它。我需要查看用户是否有电子邮件。我尝试研究如何在stackoverflow上实现这一点,但没有运气。任何提示或建议将不胜感激。

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

4 个答案:

答案 0 :(得分:8)

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

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

没有类似于' c'等标量类型的NSArray。 char,因为NS集合只包含对象。最接近一组字符的是NSString,它有多种方法可以告诉你字符是否存在。最简单的看起来像这样:

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

答案 1 :(得分:6)

您必须遍历数组中的每个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:@"@"];

答案 2 :(得分:2)

您可以创建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;
}

谢谢, 迈克尔

答案 3 :(得分:0)

我认为这是更好的方法 - 使用谓词来过滤数组,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符号:

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

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

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