我正在制作iOS计算器应用。我希望能够在字符串中找到彼此相邻的数字字符和括号的出现,如下例所示:
我希望能够在这些事件之间插入一个字符:
答案 0 :(得分:2)
这是我编写的一个快速功能,它使用正则表达式来查找匹配的模式,然后在需要的地方插入“*”。它匹配两个括号“)(例如”或数字和括号“5(”或“)3”。如果中间有空格,例如“)5”,它也会起作用。
随意调整功能以满足您的需求。不确定这是否是最好的方法,但它确实有效。
有关正则表达式的更多信息,请参阅documentation for NSRegularExpression
- (NSString *)stringByInsertingMultiplicationSymbolInString:(NSString *)equation {
// Create a mutable copy so we can manipulate it
NSMutableString *mutableEquation = [equation mutableCopy];
// The regexp pattern matches:
// ")(" or "n(" or ")n" (where n is a number).
// It also matches if there's whitepace in between (eg. (4+5) (2+3) will work)
NSString *pattern = @"(\\)\\s*?\\()|(\\d\\s*?\\()|(\\)\\s*?\\d)";
NSError *error;
NSRegularExpression *regexp = [NSRegularExpression regularExpressionWithPattern:pattern options:NSRegularExpressionCaseInsensitive error:&error];
NSArray *matches = [regexp matchesInString:equation options:NSMatchingReportProgress range:NSMakeRange(0, [equation length])];
// Keep a counter so that we can offset the index as we go
NSUInteger count = 0;
for (NSTextCheckingResult *match in matches) {
[mutableEquation insertString:@"*" atIndex:match.range.location+1+count];
count++;
}
return mutableEquation;
}
这是我测试它的方式:
NSString *result;
result = [self stringByInsertingMultiplicationSymbolInString:@"23(8+9)"];
NSLog(@"Result: %@", result);
result = [self stringByInsertingMultiplicationSymbolInString:@"(89+2)(78)"];
NSLog(@"Result: %@", result);
result = [self stringByInsertingMultiplicationSymbolInString:@"(7+8)9"];
NSLog(@"Result: %@", result);
这将输出:
Result: 23*(8+9)
Result: (89+2)*(78)
Result: (7+8)*9
注意:此代码使用ARC,因此如果您使用的是MRC,请记得自动释放复制的字符串。