objective-cnsstringnsurlhost

Detect & remove 'www' in NSURL


I have a macOS application. I need to remove the scheme and www part from any NSURL. This is what I have come up with:

// For testing purposes.
NSString *blogID = @"https://www.testing1234.tumblr.com";
    
// Create the corrected link string.
NSString *correctLink;
    
// Convert the string to a url.
NSURL *url = [NSURL URLWithString:blogID];
    
// Check if the url has a scheme.
    
if ([url scheme] != nil) {
    correctLink = [url host];
} else {
    correctLink = blogID;
}
    
// Ensure there are enough characters before
// performing the necessary 'www.' checks.
    
if ([correctLink length] > 4) {
        
    // Remove the first instance of 'www.'
    // from the blog url link string.
        
    if ([[correctLink substringToIndex:4] containsString:@"www."]) {
        correctLink = [correctLink substringFromIndex:4];
    }
}
    
NSLog(@"correctLink: %@", correctLink);

My question is: how can I reliably remove the www part of the string? For starters aren't there different variants of www such as www2? Does NSURL have any method that allows me to detect the www part of the string? (Just like how I can detect the http:// part of the string by calling scheme).

Update

I can't use stringByReplacingOccurrencesOfString because it will replace all occurrences of www. So if the URLhappens to be www.testsitewww.tumblr.com then it will become testsite.tumblr.com. That's not what I want, I only want to remove the first occurrence of www (or any other variants such as www2).


Solution

  • Try this way. You can separate the url by "." and you can get remaining string.

    - if www. or www2. or anything else comes it will separate by "." and you can get remaining string

    NSString *blogID = @"https://www.testing1234.tumblr.com";
        NSString *correctLink;
        NSURL *url = [NSURL URLWithString:blogID];
        if ([url scheme] != nil) {
            correctLink = [url host];
        } else {
            correctLink = blogID;
        }
        NSArray *arr = [correctLink componentsSeparatedByString:@"."];
        NSString *str = @"";
        for(int i=1; i<arr.count; i++)
        {
            str = [str stringByAppendingString:[arr objectAtIndex:i]];
            if(i != arr.count-1)
                str = [str stringByAppendingString:@"."];
        }
        NSLog(@"correctLink: %@", str); //correctLink: testing1234.tumblr.com