0

我想将字符串中的一些“非法”字符替换为另一个“合法”字符,我有以下代码:

- (NSString *) quitarTildes:(NSString *)aStr
{
    NSString *aux = aStr;
    NSString *invalid = @"áéíóúÁÉÍÓÚñÑ";
    NSString *valid = @"aeiouAEIOUnN";
    for (int i = 0; i < [invalid length]; i++)
        [aux stringByReplacingOccurrencesOfString: [NSString stringWithFormat:@"%c",[invalid characterAtIndex:i]] 
                                       withString: [NSString stringWithFormat:@"%c",[valid characterAtIndex:i]]];
    NSLog(@"%@",aux);
    return aux;
}

所有的非法字符仍然存在......

NSString *test = @"Hólá, Ésto es una prueba.";
test = [self quitarTildes: test];

NSLog,响应:

2013-04-04 08:58:52.896 GeoRuta_v1[1960:907] Hólá, Ésto es una prueba.
4

3 回答 3

2

从文档中:

stringByReplacingOccurrencesOfString:withString: 返回一个新字符串,其中接收器中目标字符串的所有出现都被另一个给定字符串替换。

-(NSString *)stringByReplacingOccurrencesOfString:(NSString *)target withString:(NSString *)replacement

所以:

aux = [aux stringByReplacingOccurrencesOfString: [NSString stringWithFormat:@"%c",[invalid characterAtIndex:i]] 
                                       withString: [NSString stringWithFormat:@"%c",[valid characterAtIndex:i]]];
于 2013-04-04T08:03:59.427 回答
2

一个可能更简单的解决方案来实现您的目标:

NSString *test = @"Hólá, Ésto es una prueba. - áéíóúÁÉÍÓÚñÑ";
test = [test stringByFoldingWithOptions:NSDiacriticInsensitiveSearch locale:NULL];
NSLog(@"%@", test);

输出:

Hola, Esto es una prueba. - aeiouAEIOUnN
于 2013-04-04T08:14:54.893 回答
1

一。您使用了错误的格式说明符characterAtIndex:。该方法返回unichar不是 char(出于明显的原因)。您必须使用%C(大写 C)。

二。您正在返回原始字符串,而不是替换其字符。

NSMutableString *tmp = [aStr mutableCopy];
// ...
[tmp replaceOccurrencesOfString:[NSString stringWithFormat:@"%C", [invalid characterAtIndex:i]] 
                     withString:[NSString stringWithFormat:@"%C", [valid characterAtIndex:i]]];
于 2013-04-04T08:04:08.360 回答