gpt4 book ai didi

ios - 使用字典用多个其他字符替换 NSString 中的多个字符

转载 作者:塔克拉玛干 更新时间:2023-11-02 10:08:12 25 4
gpt4 key购买 nike

我想使用字典用其他字符替换我的字符串中的一些字符。

例如,每个“a”都应该替换为“1”,每个“1”都应该替换为“9”。我不希望每个“a”被替换两次,以“9”结尾。每个字符只能替换一次。

我使用以下代码完成了这项工作,但我觉得它可以更有效率地完成。这真的是我能做的最好的吗,或者你能帮我改进我的代码吗?

NSDictionary *replacements = [NSDictionary dictionaryWithObjectsAndKeys:
// Object, Key,
@"1", @"a",
@"2", @"b",
@"3", @"c",
@"9", @"1",
@"8", @"2",
@"7", @"3",
nil];

NSString *string = @"abc-123";
NSMutableString *newString = [NSMutableString stringWithCapacity:0];

for (NSInteger i = 0; i < string.length; i++)
{
NSString *c = [NSString stringWithFormat:@"%C", [string characterAtIndex:i]];
id replacement = [replacements objectForKey:c];
if (replacement != nil) {
[newString appendString:replacement];
} else {
[newString appendString:c];
}
}

NSLog(@"newString: %@", newString); // newString: 123-987 (Works!)

明确一点:这段代码对我有用,我只是觉得它效率很低。我正在寻找改进方法。

谢谢。

最佳答案

下面的代码可能不会快很多,但会稍微简单一些,也更短一些。它使用一种即使使用也能正常工作的方法来枚举字符串的所有字符组合字符,例如 Emojis(在字符串中存储为 两个 个字符)。

NSMutableString *newString = [string mutableCopy];

[newString enumerateSubstringsInRange:NSMakeRange(0, [newString length])
options:NSStringEnumerationByComposedCharacterSequences
usingBlock:^(NSString *substring, NSRange substringRange, NSRange enclosingRange, BOOL *stop) {
NSString *repl = replacements[substring];
if (repl != nil) {
[newString replaceCharactersInRange:substringRange withString:repl];
}
}];

关于ios - 使用字典用多个其他字符替换 NSString 中的多个字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19313631/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com