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的结果始终是元音的辅音,而结果必须只是辅音。我不知道。
答案 0 :(得分:3)
在循环的每次迭代中,您正在测试整个字符串中是否存在元音,因此您将始终依次添加每个字符。
在for循环中,您需要以下代码:
if(![vocali characterIsMember:[stringa characterAtIndex:i]])
[consonanti appendFormat:@"%C",[stringa characterAtIndex:i]];
这将检查单个字符是否不在元音字符集中,并将其添加到可变字符串中。
答案 1 :(得分:1)
请注意,如果您使用characterAtIndex:
来访问单个字符,则组合字符将被分解为单个组件,例如变音符号。
Unicode-speak中的变音符号例如是重音符号,就像你的元音串中的“é”中的重音符号一样。
更好的方法是将字符串迭代在其组成的字符上:
// 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);
您将看到此片段清除基本元音和变音符号的原始字符串组合字符。
答案 2 :(得分:0)
这应该也可以 - 首先通过将它们用作字符串的拆分字符来摆脱所有人声,然后再次连接所有收到的字符串部分:
NSArray* onlyConsonantsArray = [stringa componentsSeparatedByCharactersInSet:vocali];
NSString* onlyConsonantsString = [onlyConsonantsArray componentsJoinedByString: @""];
我不知道表现,但看起来很简短: - )。
答案 3 :(得分:0)
您可以尝试以下方式:
-(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:@""];
}