2013-04-04 86 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