aboutsummaryrefslogtreecommitdiff
path: root/Foundation/GTMNSString+Replace.m
diff options
context:
space:
mode:
Diffstat (limited to 'Foundation/GTMNSString+Replace.m')
-rw-r--r--Foundation/GTMNSString+Replace.m48
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