替换字符串中的字母

Luk*_*kas 4 replace objective-c nsstring ios

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

我有String,让我们说:

NSString *string = @"a?bc?de??fghi?jzž";
Run Code Online (Sandbox Code Playgroud)

我的结果必须是这样的:

NSString *string = @"aabccdeeefghiujzz";
Run Code Online (Sandbox Code Playgroud)

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

用a替换±

用c替换č

用e代替ė

用e替换ę

等等..

也许有人可以帮助我?我有一个答案,但它没有得到很好的优化,我希望有一些更方便的解决方案.

提前致谢!

Dav*_*ong 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);
Run Code Online (Sandbox Code Playgroud)

这个日志:

new: aabccdeeefghiijzz
Run Code Online (Sandbox Code Playgroud)


das*_*ght 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);
Run Code Online (Sandbox Code Playgroud)

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