項目中有需求截取字符串,字符串中有兩個相同的字符,要獲取的新字符串就在這兩個相同字符串之間。
封裝了一個簡單的方法,只要傳入四個參數(shù),第一個參數(shù)是需要截取的字符串,第二個參數(shù)是標(biāo)記的字符,第三個參數(shù)是起始的標(biāo)記字符位置,第四個是結(jié)束的標(biāo)記字符位置,代碼如下:
// 例如:
NSString *str = @"我一個人看H完了《七月與安生》,在電影的開頭男H主角偶遇幾年未見H的安生,他問安生:七月怎樣?安生說:我不知道,我們已經(jīng)很久沒有聯(lián)系了。";
// 截取第一個"H"字符和第三個"H"字符之間的字符
[self subStringComponentsSeparatedByStrContent:str strPoint:@"H" firstFlag:1 secondFlag:3];
#pragma mark - 封裝一個截取字符串中同一個字符之間的字符串
/**
參數(shù)說明:
1.strContent:傳入的目標(biāo)字符串
2.strPoint:標(biāo)記位的字符
3.firstFlag:從第幾個目標(biāo)字符開始截取
4.secondFlag:從第幾個目標(biāo)字符結(jié)束截取
*/
- (NSString *)subStringComponentsSeparatedByStrContent:(NSString *)strContent strPoint:(NSString *)strPoint firstFlag:(int)firstFlag secondFlag:(int)secondFlag
{
// 初始化一個起始位置和結(jié)束位置
NSRange startRange = NSMakeRange(0, 1);
NSRange endRange = NSMakeRange(0, 1);
// 獲取傳入的字符串的長度
NSInteger strLength = [strContent length];
// 初始化一個臨時字符串變量
NSString *temp = nil;
// 標(biāo)記一下找到的同一個字符的次數(shù)
int count = 0;
// 開始循環(huán)遍歷傳入的字符串,找尋和傳入的 strPoint 一樣的字符
for(int i = 0; i < strLength; i++)
{
// 截取字符串中的每一個字符,賦值給臨時變量字符串
temp = [strContent substringWithRange:NSMakeRange(i, 1)];
// 判斷臨時字符串和傳入的參數(shù)字符串是否一樣
if ([temp isEqualToString:strPoint]) {
// 遍歷到的相同字符引用計數(shù)+1
count++;
if (firstFlag == count)
{
// 遍歷字符串,第一次遍歷到和傳入的字符一樣的字符
NSLog(@"第%d個字是:%@", i, temp);
// 將第一次遍歷到的相同字符的位置,賦值給起始截取的位置
startRange = NSMakeRange(i, 1);
}
else if (secondFlag == count)
{
// 遍歷字符串,第二次遍歷到和傳入的字符一樣的字符
NSLog(@"第%d個字是:%@", i, temp);
// 將第二次遍歷到的相同字符的位置,賦值給結(jié)束截取的位置
endRange = NSMakeRange(i, i);
}
}
}
//異常處理、未找到開始結(jié)束的位置、或者只找到開頭
if ((startRange.location == endRange.location)||(startRange.location > endRange.location)) {
return @"";
}
// 根據(jù)起始位置和結(jié)束位置,截取相同字符之間的字符串的范圍
NSRange rangeMessage = NSMakeRange(startRange.location + startRange.length, endRange.location - startRange.location - startRange.length);
// 根據(jù)得到的截取范圍,截取想要的字符串,賦值給結(jié)果字符串
NSString *result = [strContent substringWithRange:rangeMessage];
// 打印一下截取到的字符串,看看是否是想要的結(jié)果
NSLog(@"截取到的 strResult = %@", result);
// 最后將結(jié)果返回出去
return result;
}
結(jié)果如下圖所示:

截取字符串.png
傳送門 GitHub : https://github.com/rickie1219/DemoForSubString