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

时间:2011-10-22 12:56:16

标签: iphone objective-c ios nsstring

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

NSString *str = @"consonants.";

结果必须是:

cnsnnts

4 个答案:

答案 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;
}