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 是不是包含彼此的对象 (NSManagedObject)
NSArray 中的 iOS sdk NSArray 查找和合并