我有一个字符串,其中包含辅音和元音的单词。如何从字符串中仅提取辅音?
NSString *str = @"consonants.";
结果必须是:
cnsnnts
答案 0 :(得分:3)
你可以用所有元音制作一个字符集(@“aeiouy”)
+ (id)characterSetWithCharactersInString:(NSString *)aString
然后使用
- (NSString *)stringByTrimmingCharactersInSet:(NSCharacterSet *)set
方法。
编辑:这只会删除字符串开头和结尾的元音,如另一篇文章所述,你可以做的是使用
- (NSArray *)componentsSeparatedByCharactersInSet:(NSCharacterSet *)separator
然后将组件重新粘在一起。您可能还需要在集合中包含元音的大写版本,如果您还要处理重音(例如等等),您可能还必须包括它。
答案 1 :(得分:2)
不幸的是stringByTrimmingCharactersInSet
不会工作,因为它只修剪前导和结尾字符,但你可以尝试使用正则表达式和这样的替换:
[[NSRegularExpression
regularExpressionWithPattern:@"[^bcdefghjklmnpqrstvwx]"
options:NSRegularExpressionCaseInsensitive
error:NULL]
stringByReplacingMatchesInString:str
options:0
range:NSMakeRange(0, [str length])
withTemplate:@""]
您可能希望根据需要调整正则表达式和选项。
答案 2 :(得分:0)
可能,当然不是最佳的解决方案。我正在为您的学习打印中间结果。照顾内存分配(我不在乎)。希望有人会给你一个更好的解决方案,但你现在可以复制并粘贴它。
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);
答案 3 :(得分:0)
以下是完成工作的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;
}