diff options
Diffstat (limited to 'Foundation/GTMNSString+Replace.m')
-rw-r--r-- | Foundation/GTMNSString+Replace.m | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/Foundation/GTMNSString+Replace.m b/Foundation/GTMNSString+Replace.m new file mode 100644 index 0000000..4e8195c --- /dev/null +++ b/Foundation/GTMNSString+Replace.m @@ -0,0 +1,48 @@ +// +// GTMNSString+Replace.m +// +// Copyright 2006-2008 Google Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); you may not +// use this file except in compliance with the License. You may obtain a copy +// of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +// License for the specific language governing permissions and limitations under +// the License. +// + +#import "GTMNSString+Replace.h" + + +@implementation NSString (GTMStringReplaceAdditions) + +- (NSString *)gtm_stringByReplacingString:(NSString *)target + withString:(NSString *)replacement { + // If |target| was nil, then do nothing and return |self| + // + // We do the retain+autorelease dance here because of this use case: + // NSString *s1 = [[NSString alloc] init...]; + // NSString *s2 = [s1 stringByReplacingString:@"foo" withString:@"bar"]; + // [s1 release]; // |s2| still needs to be valid after this line + if (!target) + return [[self retain] autorelease]; + + // If |replacement| is nil we want it to be treated as if @"" was specified + // ... effectively removing |target| from self + if (!replacement) + replacement = @""; + + NSMutableString *result = [[self mutableCopy] autorelease]; + [result replaceOccurrencesOfString:target + withString:replacement + options:0 + range:NSMakeRange(0, [result length])]; + return result; +} + +@end |