简单的stringbyreplacingocurrencesofstring帮助问题



我想将字符串中的一些"非法"字符替换为另一个"合法"字符,我有这样的代码:

- (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.

来自文档:

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

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

:

aux = [aux stringByReplacingOccurrencesOfString: [NSString stringWithFormat:@"%c",[invalid characterAtIndex:i]] 
                                       withString: [NSString stringWithFormat:@"%c",[valid characterAtIndex:i]]];

一个可能更简单的方法来实现你的目标:

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

Hola, Esto es una prueba. - aeiouAEIOUnN

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

2。您返回的是原始字符串,而不是替换它的字符。

NSMutableString *tmp = [aStr mutableCopy];
// ...
[tmp replaceOccurrencesOfString:[NSString stringWithFormat:@"%C", [invalid characterAtIndex:i]] 
                     withString:[NSString stringWithFormat:@"%C", [valid characterAtIndex:i]]];

最新更新