使用字典replace多个其他字符在NSString中的多个字符

我想用字典replacestring中的某些字符,用其他字符replace。

例如,每个“a”应该被replace为“1”,并且每个“1”应该被replace为“9”。 我不想要的是每个“一个”被replace两次,最后是一个“9”。 每个angular色必须被replace一次。

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

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!) 

只是要清楚:这个代码是为我工作,我只是觉得它是非常低效的。 我正在寻找方法来改善它。

谢谢。

下面的代码可能不会更快,但稍微简单一些。 它枚举string的所有字符与一个方法,即使与组成字符,如Emojis(它们被存储为string中的两个字符)正确的方法。

 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]; } }]; 

首先用“9”replace每个“1”,然后用“1”replace每个“a”。 逻辑有什么问题?

你的字典是

 @"1", @"a", @"2", @"b", @"3", @"c", @"9", @"1", @"8", @"2", @"7", @"3", nil 

将“9”replace为“1”

 @"9", @"a", @"2", @"b", @"3", @"c", @"9", @"9", @"8", @"2", @"7", @"3", nil 

然后用“1”代替“a”

 @"9", @"1", @"2", @"b", @"3", @"c", @"9", @"9", @"8", @"2", @"7", @"3", nil 

你想把这个作为你想要的结果吗?

如果你的规则是静态的,就像你说的…我不确定是否更好

 NSString *string = @"abc-123"; NSMutableString *newString = [NSMutableString stringWithCapacity:0]; for (NSInteger i = 0; i < string.length; i++) { unichar cu = [string characterAtIndex:i]; if (cu >=97 && cu<=99){ cu -= 48; }else if (cu>=49 && cu<=51){ cu = cu+10-((cu-48)*2); } [newString appendString:[NSString stringWithFormat:@"%C",cu]]; } NSLog(@"newString: %@", newString); 

我正在使用ASCII码来匹配你的确切规则。

Interesting Posts