1

私はこのようなものを回す必要があります

NSString *stringWithParentheses = @"This string uses (something special)";

これに、プログラムで。

NSString *normalString = @"This string uses";

問題は、これらすべての奇妙なライブラリ、正規表現などを使用したくないことです.

4

3 に答える 3

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:@""];

ネストされた括弧や括弧内の一致しない括弧を含め、 と の間のすべてが削除され(ます。)

于 2013-03-19T23:34:55.610 に答える
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:@""];
}

ネストされた括弧では機能しません。または複数の括弧。しかし、それはあなたの例で動作します。これは、正確な状況に合わせて調整する必要があります。

于 2013-03-19T23:04:07.930 に答える
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: @""]);
于 2013-03-19T23:02:56.143 に答える