替换字符串中的字母
您好我有一个问题,我不知道如何解决。 问题是我甚至不知道如何谷歌。 我已经花了几个小时在互联网上寻找解决方案,但没有成功。 情况是这样的:
我有String,让我们说:
NSString *string = @"aąbcčdeęėfghiįjzž";
我的结果必须是这样的:
NSString *string = @"aabccdeeefghiujzz";
所以如果你明白我必须这样做:
用一个替换±
用c替换č
用e代替ė
用e替换ę
等等..
也许有人可以帮助我? 我有一个答案,但它没有非常优化,我希望有一些更方便的解决方案。
提前致谢!
让框架为您进行转换:
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
这将有效:
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
完成),然后遍历字符串,逐个删除所有这些标记(这就是什么循环确实)。
我只能提供这个:
[string stringByReplacingOccurrencesOfString:@"ą" withString:@"a"];
等等…
Dave DeLong的回答将用“ae”代替“æ”,用“s”代替“ß”,但不会取代连字œ,ij,ff,fi,fl,ffi,ffl,ft,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];