【发布时间】:2015-09-29 18:08:29
【问题描述】:
我有一个简单的ROT13 方法可以对字符串进行编码或解码。
+ (NSString *)ROT13encodeString:(NSString *)aString {
if (!aString) {
return nil;
}
// Find text between brackets
NSCharacterSet *delimiters = [NSCharacterSet characterSetWithCharactersInString:@"[]"];
NSArray *splitString = [aString componentsSeparatedByCharactersInSet:delimiters];
// ???
NSString *newString;
unsigned length;
unichar *buf;
unsigned i;
length = [aString length];
buf = malloc( (length + 1) * sizeof(unichar) );
[aString getCharacters:buf];
buf[length] = (unichar)0; // not really needed....
for (i = 0; i < length; i++) {
if (buf[i] >= (unichar)'a' && buf[i] <= (unichar) 'z') {
buf[i] += 13;
if (buf[i] > 'z') buf[i] -= 26;
} else if (buf[i] >= (unichar)'A' && buf[i] <= (unichar) 'Z') {
buf[i] += 13;
if (buf[i] > 'Z') buf[i] -= 26;
}
}
newString = [NSString stringWithCharacters:buf length:length];
free(buf);
return newString;
}
但是,在要编码的文本中,有一些“安全”的词放在括号 [] 中。包括括号在内的单词永远不应该被编码,它们总是需要处于非编码状态。
我想我可以提取所有出现在括号中的文本,但不确定它会有什么帮助:
NSCharacterSet *delimiters = [NSCharacterSet characterSetWithCharactersInString:@"[]"];
NSArray *splitString = [aString componentsSeparatedByCharactersInSet:delimiters];
如何修改我当前的方法以包含此内容?
【问题讨论】:
-
我不会费心拆分字符串。当你找到
[时,我会在循环字符时设置一个标志,当你找到]时取消设置,不要在设置标志时对每个字符执行 rot-13ing。根据您是否/如何处理嵌套括号,可能必须稍微复杂一些。 -
同意丹。使用
NSScanner也可能会让您的生活更轻松。
标签: ios objective-c regex encoding nsstring