2013-04-04 112 views
0

我想从一个字符串到另一个“合法”字符替换一些“ilegal”字,我有这样的代码:简单stringByReplacingOccurrencesOfString帮助问题

- (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; 
} 

而且所有ilegal角色仍然存在......

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. 

回答

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]]]; 
+0

好的,谢谢你的回答,它真的起作用了,我的想法很好,我忘记了'%c'和'%C',我认为这个方法和普通的'NSString'一起工作,非常感谢。 – rokimoki 2013-04-04 08:21:29

+0

@rokimoki不客气。 – 2013-04-04 08:35:41

2

从文档:

stringByReplacingOccurrencesOfString:withString:返回一个新的字符串 ,其中在接收器的目标字符串的所有出现 他人所提供字符串替代。

- (的NSString *)stringByReplacingOccurrencesOfString:(的NSString *)目标withString:(的NSString *)更换

所以:

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

当我这样做,Xcode的给了我一个错误有关返回值,我解释该方法不返回,只需通过引用进行修改。我不好,我会试试。 – rokimoki 2013-04-04 08:05:16

+0

@rokimoki还要注意你所犯的其他错误。 – 2013-04-04 08:06:28

2

一个或许更简单的解决方案,以实现自己的目标:

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

输出:

Hola, Esto es una prueba. - aeiouAEIOUnN 
+0

这将与其他类型的回肠字符一起使用? likeàèìòùåä,etc ... – rokimoki 2013-04-04 08:22:57

+0

@rokimoki:是的 - 你为什么不试试? (这可能取决于你所说的“非法”,它应该适用于所有带有变音符号的字符) – 2013-04-04 08:25:50

+0

对NSXMLParser来说这是违法的,但我发现这不适用于我正在做的事情,因为我想再次输入口音,我的转换模式就会变成:: - a- ::(例如),然后我会将:: - a- ::转换为á,为什么我这么做?因为NSXMLParser不会解析变音符号,所以我搜索了很多答案,任何人工作,只是想让我的方法运行。谢谢。 – rokimoki 2013-04-04 08:30:28