将字符更改为文本字段中的其他字符

时间:2012-08-20 04:14:03

标签: objective-c ios xcode

我想创建一个de code类型的应用程序,其中你有一个代码“a = z,b = y,c = x”,当用户在文本字段中放入混杂的字母时,它将解码它适合他们。例如。我输入“a b c”,当我点击一个按钮时,它将显示在另一个文本字段“z y x”中。

我尝试过像这样使用Regex:

NSString *inputFieldContents = inputField.text; // Suppose it's "Hello, zyxw!";
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"zyxw" options:NSRegularExpressionCaseInsensitive error:NULL];

NSRange range = NSMakeRange (0, [inputFieldContents length]);
NSString *res = [regex stringByReplacingMatchesInString:inputFieldContents options:0 range:range withTemplate:@"abcd"];
NSLog(@"%@", res);

但是如果字母zyxw被输入,这只会给我解码的消息。如果我输入wxyz,它就不会像我希望的那样给我dcba。

有没有人知道如何做到这一点?

谢谢!

1 个答案:

答案 0 :(得分:2)

你可以使用:

简单地替换可变字符串中的字符串

-[NSMutableString replaceOccurrencesOfString:withString:options:range:]

如果您的案例非常基础,您可能会赞成:

-[NSString stringByReplacingOccurrencesOfString:withString:]


更新 - 所以解决这个问题的一种方法是:

NSMutableString * str = [inputField.text mutableCopy];

enum { NumSubstitutions = 4 };
NSString * const sought[NumSubstitutions] = { @"z", @"y", @"x", @"w" };
NSString * const replacements[NumSubstitutions] = { @"a", @"b", @"c", @"d" };

for (NSUInteger i = 0; i < NumSubstitutions; ++i) {
    [str replaceOccurrencesOfString:sought[i]
                         withString:replacements[i]
                            options:NSCaseInsensitiveSearch
                              range:NSMakeRange(0, inputFieldContents.length)];
}

return [str copy];