1

我想制作一个解码类型的应用程序,其中您有一个代码“a = z,b = y,c = x”,当用户在文本字段中输入一堆字母时,它会为他们解码. 例如。我输入了“ab c”,当我单击一个按钮时,它将显示在另一个文本字段“zy x”中。

我试过像这样使用正则表达式:

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。

有人对如何做到这一点有任何想法吗?

谢谢!

4

1 回答 1

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];
于 2012-08-20T04:18:26.863 回答