Objective-C:在字符串中查找辅音

我有一个包含辅音和元音的单词的字符串。 如何从字符串中仅提取辅音?

NSString *str = @"consonants."; 

结果必须是:

 cnsnnts 

你可以用所有元音制作一个字符集(@“aeiouy”)

 + (id)characterSetWithCharactersInString:(NSString *)aString 

然后使用

 - (NSString *)stringByTrimmingCharactersInSet:(NSCharacterSet *)set 

方法。

编辑:这只会删除字符串开头和结尾的元音,如另一篇文章中所指出的那样,你可以做的就是使用

 - (NSArray *)componentsSeparatedByCharactersInSet:(NSCharacterSet *)separator 

然后将组件重新粘在一起。 您可能还需要在集合中包含元音的大写版本,如果您还要处理重音(àáèèêì…等等),您可能还必须包括它。

不幸的是stringByTrimmingCharactersInSet不会工作,因为它只修剪前导和结束字符,但你可以尝试使用正则表达式和替换,如下所示:

 [[NSRegularExpression regularExpressionWithPattern:@"[^bcdefghjklmnpqrstvwx]" options:NSRegularExpressionCaseInsensitive error:NULL] stringByReplacingMatchesInString:str options:0 range:NSMakeRange(0, [str length]) withTemplate:@""] 

您可能希望根据需要调整正则表达式和选项。

可能,肯定不是最佳的解决方案。 我正在为您的学习打印中间结果。 照顾内存分配(我不在乎)。 希望有人会给你一个更好的解决方案,但你现在可以复制并粘贴它。

 NSString *test = @"Try to get all consonants"; NSMutableString *found = [[NSMutableString alloc] init]; NSInteger loc = 0; NSCharacterSet *consonants = [NSCharacterSet characterSetWithCharactersInString:@"bcdfghjklmnpqrstvwxyz"]; while(loc!=NSNotFound && loc<[test length]) { NSRange r = [[test lowercaseString] rangeOfCharacterFromSet:consonants options:0 range:NSMakeRange(loc, [test length]-loc)]; if(r.location!=NSNotFound) { NSString *temp = [test substringWithRange:r]; NSLog(@"Range: %@ Temp: %@",NSStringFromRange(r), temp); [found appendString:temp]; loc=r.location+r.length; } else { loc=NSNotFound; } } NSLog(@"Found: %@",found); 

这是一个NSString类别,它完成了这项工作:

 - (NSString *)consonants { NSString *result = [NSString stringWithString:self]; NSCharacterSet *characterSet = [NSCharacterSet characterSetWithCharactersInString:@"aeiou"]; while(1) { NSRange range = [result rangeOfCharacterFromSet:characterSet options:NSCaseInsensitiveSearch]; if(range.location == NSNotFound) break; result = [result stringByReplacingCharactersInRange:range withString:@""]; } return result; }