4

您好,我有一个问题,我不知道如何解决。问题是我什至不知道如何用谷歌搜索它。我已经在互联网上花了几个小时寻找解决方案,但没有成功。情况是这样的:

我有字符串,可以说:

NSString *string = @"aąbcčdeęėfghiįjzž";

我的结果必须是这样的:

NSString *string = @"aabccdeeefghiujzz";

所以如果你明白我必须这样做:

将ą替换为

用 c 替换 č

用 e 替换 ė

用 e 替换 ę

等等..

也许有人可以帮助我?我有一个答案,但它不是很优化,我希望有一些更方便的解决方案。

提前致谢!

4

4 回答 4

11

让框架为您进行转换:

NSString *blah = @"aąbcčdeęėfghiįjzž";
NSData *data = [blah dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES];
NSString *newblah = [[NSString alloc] initWithData:data encoding:NSASCIIStringEncoding];
NSLog(@"new: %@", newblah);

这记录:

new: aabccdeeefghiijzz
于 2012-05-24T20:17:13.797 回答
5

这将起作用:

NSString *str = @"aąbcčdeęėfghiįjzž";
NSLog(@"%@", str);
NSMutableString *s = [[str decomposedStringWithCompatibilityMapping] mutableCopy];
NSUInteger pos = 0;
while(pos < s.length) {
    NSRange r = [s rangeOfComposedCharacterSequenceAtIndex:pos];
    if (r.location == NSNotFound) break;
    pos = ++r.location;
    if (r.length == 1) continue;
    r.length--;
    [s deleteCharactersInRange:r];
}
NSLog(@"%@", s);

这个想法是首先将每个带有变音标记的字符分解为其基本字符序列和一系列Unicode 组合变音标记(由 完成decomposedStringWithCompatibilityMapping),然后遍历字符串,并逐个删除所有这些标记(这就是循环确实)。

于 2012-05-24T20:11:47.543 回答
0

我只能提供这个:

[string stringByReplacingOccurrencesOfString:@"ą" withString:@"a"];

等等...

于 2012-05-24T14:10:00.840 回答
0

Dave DeLong 的回答会将“æ”替换为“ae”,将“ß”替换为“s”,但不会替换连字 –、ij、ff、fi、f、ffi、ffl、ſt、st、...

一个改进的解决方案是添加三行映射来处理一切正常:

blah = [blah stringByReplacingOccurrencesOfString:@"Œ" withString:@"OE"];
blah = [blah stringByReplacingOccurrencesOfString:@"œ" withString:@"oe"];
blah = [blah precomposedStringWithCompatibilityMapping];

NSData *data = [blah dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES];
NSString *newblah = [[NSString alloc] initWithData:data encoding:NSASCIIStringEncoding];
于 2014-01-16T09:06:59.310 回答