2012-11-16 64 views
6

我想從NSString提取子字符串。怎麼可能。從NSString提取子字符串

實施例:字符串是abcdefwww.google.comabcdef

輸出:www.google.com

在主字符串,它不預先確定哪些URL來的時候,這可能是谷歌。 COM或yahoo.com等

所以我必須找到.COM瓦特在WWW的開始位置和m的最後一個位置。

所以我的問題是,我怎麼能找到的WWW起始部位W.COM的位置,所以我抽出這部分

編輯由於問題:

如何,我們可以從這個字符串中提取www.mywebsite.co.uk asdfwww.mywebsite.co.ukasdfajsf

感謝

從字符串
+2

讀的NSString /的NSMutableString文檔 –

+0

一個快速谷歌搜索是所有你需要 –

+0

@AndreyChernukha我編輯的問題,請檢查它的[找到一個子 – QueueOverFlow

回答

18

子像波紋管

 - (NSString *)extractString:(NSString *)fullString toLookFor:(NSString *)lookFor skipForwardX:(NSInteger)skipForward toStopBefore:(NSString *)stopBefore 
    { 

     NSRange firstRange = [fullString rangeOfString:lookFor]; 
     NSRange secondRange = [[fullString substringFromIndex:firstRange.location + skipForward] rangeOfString:stopBefore]; 
     NSRange finalRange = NSMakeRange(firstRange.location + skipForward, secondRange.location + [stopBefore length]); 

     return [fullString substringWithRange:finalRange]; 
    } 

使用這種方法如下面...

NSString *strTemp = [self extractString:@"abcdefwww.google.comabcdef" toLookFor:@"www" skipForwardX:0 toStopBefore:@".com"]; 
NSLog(@"\n\n Substring ==>> %@",strTemp); 

更多信息,參見下文鏈接..

help-needed-function-extract-string-string

+0

感謝您的回覆..我剛剛編輯的問題,請檢查它 – QueueOverFlow

+0

謝謝,我試圖執行此 – QueueOverFlow

+0

有問題那麼asdfwww.mywebsite.co.ukasdfajsf? – QueueOverFlow

8

你可以得到使用以下代碼的子字符串

-(NSString*)stringBetweenString:(NSString*)start andString:(NSString *)end withstring:(NSString*)str 
{ 
    NSScanner* scanner = [NSScanner scannerWithString:str]; 
    [scanner setCharactersToBeSkipped:nil]; 
    [scanner scanUpToString:start intoString:NULL]; 
    if ([scanner scanString:start intoString:NULL]) { 
     NSString* result = nil; 
     if ([scanner scanUpToString:end intoString:&result]) { 
      return result; 
     } 
    } 
    return nil; 
} 

要調用這個,

NSString *cURL=[self stringBetweenString:@"www." andString:@".com" withstring:@"abcdefwww.google.comabcdef"]; 

NSString *cAudiolink=[NSString stringWithFormat:@"www.%@.com",cURL]; 

cAudiolink是導致串

+0

感謝您的answer.there問題如何我解壓縮asdfwww.mywebsite.co.ukasdfajsf – QueueOverFlow

2

您可以使用正則表達式。

使用該類別:

@implementation NSString (MyRegex) 

- (NSString *)firstMatchWithRegex:(NSString *)regex error:(NSError **)e { 
    NSError *error = nil; 
    NSRegularExpression *re = [NSRegularExpression regularExpressionWithPattern:regex options:NSRegularExpressionSearch error:&error]; 

    if(re == nil) { 
     if(e) *e = error; 
     return nil; 
    } 

    NSArray *matches = [re matchesInString:self options:0 range:NSMakeRange(0, [self length])]; 

    if([matches count] == 0) {    
     NSString *errorDescription = [NSString stringWithFormat:@"Can't find a match for regex: %@", regex]; 
     NSError *error = [NSError errorWithDomain:NSStringFromClass([self class]) code:0 userInfo:@{NSLocalizedDescriptionKey : errorDescription}]; 
     if(e) *e = error; 
     return nil; 
    } 

    NSTextCheckingResult *match = [matches lastObject]; 
    NSRange matchRange = [match rangeAtIndex:1]; 
    return [self substringWithRange:matchRange]; 
} 

@end 

您可以撥打:

[@"abcdefwww.google.comabcdef" firstMatchWithRegex:@"(www.*\\.com)" error:nil] 

返回:

www.google.com 
+0

感謝您的答案,我如何可以從這個字符串中提取網址mywebsite.co.uk asdfwww.mywebsite.co.ukasdfajsf – QueueOverFlow

+0

'[@ asdfwww.mywebsite.co.ukasdfajsf「firstMatchWithRegex:@」(www。* \\。co \\。uk)「error:nil]' www.mywebsite.co.uk – nst

2

我得到了我的問題的解決,谷歌上搜索後。我執行下面的代碼,它的工作對我罰款

NSString *finalURL; 
    NSString *[email protected]"abcdefwww.yahoomail.comabcdef"; 

    NSRange range = [string rangeOfString:@"www"]; 


    NSString *tempUrl=[string substringFromIndex:range.location]; 




    NSRange range2 = [tempUrl rangeOfString:@".com"]; 

    finalURL=[tempUrl substringWithRange:NSMakeRange(0, range2.location+4)]; 

    NSLog(@"your URL is %@",finalURL); //prints www.yahoomail.com