iOS | NSString截取字符串中相同字符之間的字符串

項目中有需求截取字符串,字符串中有兩個相同的字符,要獲取的新字符串就在這兩個相同字符串之間。

封裝了一個簡單的方法,只要傳入四個參數(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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,568評論 19 139
  • 第5章 引用類型(返回首頁) 本章內(nèi)容 使用對象 創(chuàng)建并操作數(shù)組 理解基本的JavaScript類型 使用基本類型...
    大學(xué)一百閱讀 3,679評論 0 4
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法,類相關(guān)的語法,內(nèi)部類的語法,繼承相關(guān)的語法,異常的語法,線程的語...
    子非魚_t_閱讀 34,697評論 18 399
  • 一、秒殺業(yè)務(wù)為什么難做1)im系統(tǒng),例如qq或者微博,每個人都讀自己的數(shù)據(jù)(好友列表、群列表、個人信息);2)微博...
    錯位的季節(jié)閱讀 237評論 0 0
  • 耐得住寂寞,才守得住繁華。 ——題記 ...
    不再遇見閱讀 410評論 0 0

友情鏈接更多精彩內(nèi)容