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