【问题标题】:Is there a better way "normalising" (replace things like "á" with "a") a string in objective c? [duplicate]有没有更好的方法“标准化”(用“a”替换“á”之类的东西)目标c中的字符串? [复制]
【发布时间】:2014-06-25 07:52:59
【问题描述】:

为了进行搜索,我需要删除所有出现的包含抑扬符、插入符号或撇号的字符,例如 á 和“正常”a。有没有比手动替换所有已知事件更好的方法?

    _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"];

这是一个示例代码,所以我知道循环是此解决方案的改进。但这根本无法维护。

【问题讨论】:

标签: objective-c replace nsstring


【解决方案1】:

你是如何进行搜索的?如果您在自己的代码中比较字符串,您可以使用-[NSString compare:options:]NSDiacriticInsensitiveSearchNSWidthInsensitiveSearch 等选项以及更知名的NSCaseInsensitiveSearch。如果你省略NSLiteralSearch,那么分解后的序列将匹配它们预先组合的对应物,这通常是你想要的。

如果您使用谓词,则可以将[d] 修饰符应用于比较运算符,例如CONTAINS[d]

如果您真的想转换字符串而不是仅仅改变比较方式,您需要-stringByFoldingWithOptions:locale: 方法:

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

【讨论】:

猜你喜欢
  • 2021-11-12
  • 1970-01-01
  • 1970-01-01
  • 2012-01-09
  • 1970-01-01
  • 1970-01-01
  • 2013-04-29
  • 2020-04-16
  • 2014-02-07
相关资源
最近更新 更多