問題:解決替換同一個字符串的多個相同的字符eg.
xxx這個超級大土豪白送xxx一個!趕快來搶把!
將第一個xxx換成名字
將第二個xxx換成物品
兩種辦法 第二種辦法更靈活一點
//第一種辦法簡單粗暴(思路獲取第一次xxx出現的位置然后替換成名字 替換之后string中就只有一個xxx了 然后用物品替換string中僅有的一個xxx)
// NSRange range = [share6 rangeOfString:@"xxx"];//獲取第一次出現的位置
// share6 = [share6 stringByReplacingCharactersInRange:range withString:_m_dataDic[@"nickName"]];
// share5 = [share5 stringByReplacingCharactersInRange:range withString:_m_dataDic[@"nickName"]];
// shareContent = [[_m_dataDic[@"gender"]integerValue] == 1?share5:share6 replace:@"xxx" withString:((!_m_dataDic[@"content"] || [_m_dataDic[@"content"] isKindOfClass:[NSNull class]])?@"順風車":_m_dataDic[@"content"])];
//第二種方法(思路 首先遍歷這個字符串 然后找到所有的xxx 所在的位置的index 然后通過index將字符串進行替換)
NSMutableArray *arrayShare = [self getRangeStr:share6 findText:@"xxx"];
shareContent = [[_m_dataDic[@"gender"]integerValue] == 1?share5:share6 stringByReplacingCharactersInRange:NSMakeRange([arrayShare[1]integerValue], 3) withString:((!_m_dataDic[@"content"] || [_m_dataDic[@"content"] isKindOfClass:[NSNull class]])?@"順風車":_m_dataDic[@"content"])];
shareContent = [shareContent stringByReplacingCharactersInRange:NSMakeRange([arrayShare[0]integerValue], 3) withString:_m_dataDic[@"nickName"]];
//獲取這個字符串中的所有xxx的所在的index
- (NSMutableArray *)getRangeStr:(NSString *)text findText:(NSString *)findText
{
NSMutableArray *arrayRanges = [NSMutableArray arrayWithCapacity:20];
if (findText == nil && [findText isEqualToString:@""]) {
return nil;
}
NSRange rang = [text rangeOfString:findText]; //獲取第一次出現的range
if (rang.location != NSNotFound && rang.length != 0) {
[arrayRanges addObject:[NSNumber numberWithInteger:rang.location]];//將第一次的加入到數組中
NSRange rang1 = {0,0};
NSInteger location = 0;
NSInteger length = 0;
for (int i = 0;; i++)
{
if (0 == i) {//去掉這個xxx
location = rang.location + rang.length;
length = text.length - rang.location - rang.length;
rang1 = NSMakeRange(location, length);
}else
{
location = rang1.location + rang1.length;
length = text.length - rang1.location - rang1.length;
rang1 = NSMakeRange(location, length);
}
//在一個range范圍內查找另一個字符串的range
rang1 = [text rangeOfString:findText options:NSCaseInsensitiveSearch range:rang1];
if (rang1.location == NSNotFound && rang1.length == 0) {
break;
}else//添加符合條件的location進數組
[arrayRanges addObject:[NSNumber numberWithInteger:rang1.location]];
}
return arrayRanges;
}
return nil;
}