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

ドキュメントから:

stringByReplaceingOccurrencesOfString:withString: レシーバ内のターゲット文字列のすべての出現箇所が別の指定された文字列に置き換えられた新しい文字列を返します。

-(NSString *)stringByReplaceingOccurrencesOfString:(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 に答える
1

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 に答える