我想将字符串中的一些"非法"字符替换为另一个"合法"字符,我有这样的代码:
- (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]]];