【问题标题】:Remove the vowels from a string从字符串中删除元音
【发布时间】:2011-10-28 22:01:32
【问题描述】:
NSMutableString *stringa = [[NSMutableString alloc] initWithFormat:@"%@", surnameField.text];

if ([stringa length] < 3) {
    [stringa appendString:@"x"];
}

NSMutableString *consonanti = [[NSMutableString alloc] init];

NSCharacterSet *vocali = [NSCharacterSet characterSetWithCharactersInString:@"aeiouàèìòùáéíóúAEIOUÀÈÌÒÙÁÉÍÓÚ"];

NSRange r;

for (int i=0; i < [stringa length]; i++) {

    r = [stringa rangeOfCharacterFromSet:vocali];

    if (r.location != NSNotFound) {
        [consonanti appendFormat:@"%c",[stringa characterAtIndex:i]];
    }
    else {
    }
}

cfField.text = consonanti;
[stringa release];
[consonanti release];

cfField.text 的结果总是带有元音的辅音,而结果必须只有辅音。我不知道。

【问题讨论】:

标签: iphone objective-c nsrange


【解决方案1】:

您在循环的每次迭代中测试整个字符串中元音的存在,因此您将始终依次添加每个字符。

在您的 for 循环中,您需要以下代码:

if(![vocali characterIsMember:[stringa characterAtIndex:i]])
    [consonanti appendFormat:@"%C",[stringa characterAtIndex:i]];

这会检查单个字符是否不在元音字符集中,并将其添加到可变字符串中。

【讨论】:

  • %c 是单个 C char 的格式说明符。您必须使用%C 来创建unichar
【解决方案2】:

请注意,如果您使用characterAtIndex: 访问单个字符,组合字符将被分解为其单个组件,例如变音符号。

Unicode 语言中的变音符号例如是重音符号,就像元音字符串中“é”中的重音符号。

更好的方法是在其组合字符上迭代字符串:

// A string with composed diacritic characters
// In clear text it is "Renée Ångström"
NSString *stringWithComposedChars = @"Rene\u0301e A\u030Angstro\u0308m";
NSString *vowels = @"aeiouàèìòùáéíóúäëïöü";

NSMutableString *consonants = [NSMutableString string];

[stringWithComposedChars
 enumerateSubstringsInRange:NSMakeRange(0,[stringWithComposedChars length])
                                        options:NSStringEnumerationByComposedCharacterSequences
                                        usingBlock: ^(NSString *substring,NSRange rng1, NSRange rng2, BOOL *stop)
{
    if ( [vowels rangeOfString:substring options:NSCaseInsensitiveSearch|NSWidthInsensitiveSearch].location == NSNotFound ) {
        [consonants appendString:substring];
    }
}];

NSLog(@"Original string: \"%@\" - Vowels removed: \"%@\"", stringWithComposedChars, consonants);

您会看到,这个 sn-p 清除了基本元音和变音符号的原始组合字符字符串。

【讨论】:

    【解决方案3】:

    这也应该有效 - 首先通过将所有人声用作字符串的拆分字符来消除所有人声,然后再次连接所有接收到的字符串部分:

    NSArray*  onlyConsonantsArray  = [stringa componentsSeparatedByCharactersInSet:vocali];
    NSString* onlyConsonantsString = [onlyConsonantsArray componentsJoinedByString: @""];
    

    我不知道性能如何,但它看起来很短:-)。

    【讨论】:

      【解决方案4】:

      你可以试试这样的:

        -(NSString *) removeVowels:(NSString *) value
        {
            NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"([A,Á,Ã,E,É,Ê,I,Í,O,Ô,Ó,Õ,U,Û,Ü,Ú]?)" options:NSRegularExpressionCaseInsensitive error:nil];
            return [regex stringByReplacingMatchesInString:value options:0 range:NSMakeRange(0, [value length]) withTemplate:@""];
        }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-11-23
        • 2021-05-23
        • 1970-01-01
        • 2014-06-04
        • 1970-01-01
        • 2018-08-27
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多