好的,假设我有这个字符串:
R RATS ARE FAR
我想用 X 替换独立的 R 以便:
X RATS ARE FAR
我试过 stringByReplacingOccurrencesOfString 但这将所有 R 替换为 X。实现它的一种方法是检查字母前后是否有空格,这意味着它是独立的,然后去杀戮,但这种方法似乎很蹩脚。字符串也是动态的,R 的位置也是动态的。
好的,假设我有这个字符串:
R RATS ARE FAR
我想用 X 替换独立的 R 以便:
X RATS ARE FAR
我试过 stringByReplacingOccurrencesOfString 但这将所有 R 替换为 X。实现它的一种方法是检查字母前后是否有空格,这意味着它是独立的,然后去杀戮,但这种方法似乎很蹩脚。字符串也是动态的,R 的位置也是动态的。
我在这里假设单词可以被几乎任何非字母数字字符包围,对吗?(否则你只需用“X”替换@“R”,加上前导/尾随出现的特殊情况)
一种方法是使用RegexKitLite的
[string replaceOccurrencesOfRegex:@"\bR\b" withString:@"X"];
(\b
表示PCRE 风格正则表达式中的word * b *oundaries)
然后是CFStringTokenizer(搜索链接文档kCFStringTokenizerUnitWordBoundary
),这可能会有所帮助。
我会这样做:
NSString *statement = @"R RATS ARE FAR";
statement = [statement stringByReplacingOccurrencesOfString:@" R " withString:@" X "];
// now check if the string starts with R + space
if ([statement hasPrefix:@"R "])
statement = [statement stringByReplacingOccurrencesOfString:@"R " withString:@"X " options:0 range:NSMakeRange(0,2)];
// now check the end
if ([statement hasSuffix:@" R"])
statement = [statement stringByReplacingOccurrencesOfString:@" R" withString:@" X" options:0 range:NSMakeRange([statement length] - 2, 2)];
如果你打算在这个字符串中进行大量替换,你应该使用NSMutableString
.