我需要改变这样的事情
NSString *stringWithParentheses = @"This string uses (something special)";
以编程方式进入此。
NSString *normalString = @"This string uses";
问题是我不想使用所有这些奇怪的库,正则表达式等。
答案 0 :(得分:5)
如果你改变了对正则表达式的看法,这里有一个简短,干净的解决方案:
NSString *foo = @"First part (remove) (me (and ((me)))))) (and me) too))";
NSRegularExpression *expr = [NSRegularExpression regularExpressionWithPattern:@"\\(.*\\)" options:0 error:NULL];
NSString *bar = [expr stringByReplacingMatchesInString:foo options:0 range:NSMakeRange(0, foo.length) withTemplate:@""];
(
和)
之间的所有内容都会被删除,包括括号内的任何嵌套括号和不匹配的括号。
答案 1 :(得分:4)
找到第一个打开的括号,记下它的索引,找到结束的括号,记下它的索引,并删除索引之间的字符(包括索引本身)。
要查找角色使用:
[string rangeOfString:@"("];
删除范围:
[string stringByReplacingCharactersInRange:... withString:@""];
以下是解决方案:
NSString* str = @"This string uses (something special)";
NSRange rgMin = [str rangeOfString:@"("];
NSRange rgMax = [str rangeOfString:@")"];
NSRange replaceRange = NSMakeRange(rgMin.location, rgMax.location-rgMin.location+1);
NSString* newString = str;
if (rgMin.location < rgMax.location)
{
newString = [str stringByReplacingCharactersInRange:replaceRange withString:@""];
}
它不会在嵌套括号上工作。或多个括号。但它适用于你的例子。这将根据您的具体情况进行改进。
答案 2 :(得分:3)
一种方法是找到第一次出现'('字符和')'字符的最后一次出现的位置,并通过消除这些范围之间的所有字符来构建子字符串。我举了一个例子:
NSString* str= @"This string uses (something special)";
NSRange r1=[str rangeOfString: @"("];
NSRange r2= [str rangeOfString: @")" options: NSBackwardsSearch];
NSLog(@"%@",[str stringByReplacingCharactersInRange: NSMakeRange(r1.location, r2.location+r2.length-r1.location) withString: @""]);