我需要把这样的东西
NSString *stringWithParentheses = @"This string uses (something special)";
以编程方式进入这一点。
NSString *normalString = @"This string uses";
问题是我不想使用所有这些奇怪的库、正则表达式等。
我需要把这样的东西
NSString *stringWithParentheses = @"This string uses (something special)";
以编程方式进入这一点。
NSString *normalString = @"This string uses";
问题是我不想使用所有这些奇怪的库、正则表达式等。
如果您对正则表达式改变主意,这里有一个简短、干净的解决方案:
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:@""];
(
和之间的所有内容都)
被删除,包括任何嵌套的括号和括号内不匹配的括号。
只需找到第一个左括号,记下它的索引,找到右括号,记下它的索引,然后删除索引之间的字符(包括索引本身)。
要查找字符,请使用:
[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:@""];
}
它不适用于嵌套括号。或多个括号。但它适用于您的示例。这将根据您的具体情况进行细化。
一种方法是找到“(”字符的第一次出现和“)”字符的最后一次出现的位置,并通过消除这些范围之间的所有字符来构建子字符串。我做了一个例子:
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: @""]);