2014-06-25 30 views
0

爲了搜索我需要刪除所有出現的字符,包含一個旋轉,插入符號或撇號如á與「正常」a。有沒有比手動替換所有已知事件更好的方法?有沒有更好的方法「正常化」(將「á」替換爲「a」)目標c中的字符串?

_string = [_string stringByReplacingOccurrencesOfString:@"é" withString:@"e"]; 
    _string = [_string stringByReplacingOccurrencesOfString:@"è" withString:@"e"]; 
    _string = [_string stringByReplacingOccurrencesOfString:@"ê" withString:@"e"]; 
    _string = [_string stringByReplacingOccurrencesOfString:@"á" withString:@"a"]; 
    _string = [_string stringByReplacingOccurrencesOfString:@"à" withString:@"a"]; 
    _string = [_string stringByReplacingOccurrencesOfString:@"â" withString:@"a"]; 
    _string = [_string stringByReplacingOccurrencesOfString:@"ó" withString:@"o"]; 
    _string = [_string stringByReplacingOccurrencesOfString:@"ò" withString:@"o"]; 
    _string = [_string stringByReplacingOccurrencesOfString:@"ô" withString:@"o"]; 
    _string = [_string stringByReplacingOccurrencesOfString:@"ú" withString:@"u"]; 
    _string = [_string stringByReplacingOccurrencesOfString:@"ù" withString:@"u"]; 
    _string = [_string stringByReplacingOccurrencesOfString:@"û" withString:@"u"]; 
    _string = [_string stringByReplacingOccurrencesOfString:@"í" withString:@"i"]; 
    _string = [_string stringByReplacingOccurrencesOfString:@"ì" withString:@"i"]; 
    _string = [_string stringByReplacingOccurrencesOfString:@"î" withString:@"i"]; 

這是一個示例代碼,所以我知道一個循環是對此解決方案的改進。但這根本不可維護。

+0

@ dandan78不是這個問題的重複。這一個刪除,這個取代。 – Sulthan

+0

http://stackoverflow.com/questions/7965301/remove-all-accents-by-string? – Larme

回答

2

你最近在做什麼?如果您要在自己的代碼中比較字符串,則可以使用-[NSString compare:options:],並使用NSDiacriticInsensitiveSearchNSWidthInsensitiveSearch以及更爲人熟知的NSCaseInsensitiveSearch等選項。如果您省略NSLiteralSearch,則分解的序列將與它們的預先分解的序列匹配,這通常是您想要的。

如果您使用謂詞,則可以將[d]修飾符應用於比較運算符,如CONTAINS[d]

如果你真的要變換的字符串,而不是僅僅改變了你如何比較,你想要的-stringByFoldingWithOptions:locale:方法:

_string = [_string precomposedStringWithCanonicalMapping]; 
_string = [_string stringByFoldingWithOptions:NSDiacriticInsensitiveSearch locale:nil]; 
+0

謝謝比我的解決方案快得多。但要完整,這裏的解決方案也可以工作:http://stackoverflow.com/questions/7965301/remove-all-accents-by-string –

相關問題