2017-08-30 91 views
0

我有一个macOS应用程序。我需要删除任何NSURL的方案和www部分。这是我想出了:在NSURL中检测并移除'www'

// 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); 

我的问题是:我怎么能可靠地去除字符串的一部分www?对于初学者来说,www的变体不是www2NSURL有什么方法可以让我检测到字符串的www部分? (就像我可以通过调用scheme来检测字符串的http://部分)。

更新

我不能使用stringByReplacingOccurrencesOfString因为它将取代的www所有出现。所以如果url恰好是www.testsitewww.tumblr.com那么它将变成testsite.tumblr.com。这不是我想要的,我只想删除第一次出现www(或其他任何变体,如www2)。

谢谢,丹。

回答

1

@Supertecnoboff尝试这种方式。 您可以通过“。”分隔网址。你可以得到剩余的字符串。

- 如果www。或www2。或其他任何东西都会通过“。”分开。并且你可以得到剩余的字符串

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 
+0

@Supertecnoboff更新了代码并进行了测试。请检查一下。 –

+0

完美地工作,正是我需要的。谢谢! – Supertecnoboff

0

您可以替换文本前的部分:

NSString* url = [urlWithWWW stringByReplacingOccurrencesOfString:@"www." withString:@""]; 
+0

问题是,它会替换所有出现的'''''''''。所以如果url恰好是'''www.testsitewww.tumblr.com''',那么它就会变成'''testsite.tumblr.com'''。这不是我想要的,我只想删除第一次出现的'''www'''(或任何其他变体,如'''www2''')。 – Supertecnoboff

+0

你可以检查文本的开头 - > [字符串hasPrefix:@“www。”] - >然后子字符串 –

0

做到这一点

NSString *blogID = @"https://www.testing1234.tumblr.com"; 
[blogID stringByReplacingOccurrencesOfString:@"www" withString:@""]; 
//or 
[blogID stringByReplacingOccurrencesOfString:@"www." withString:@""]; 

if([blogID hasPrefix:@"www"]) { 
//do stuff 
} 
+0

问题在于,它会替换所有出现的'''''''''。所以如果url恰好是'''www.testsitewww.tumblr.com''',那么它就会变成'''testsite.tumblr.com'''。这不是我想要的,我只想删除第一次出现的'''www'''(或任何其他变体,如'''www2''')。 – Supertecnoboff

+0

@Supertecnoboff或者你可以在“。”的基础上分割字符串,并将值传递给数组。现在,您可以循环访问数组,并根据您的需要比较每个索引处的字符串与“WWW/WW2”,如果特定索引处的值与“WWW/WW2”匹配,那么您可以保留该索引数据,并将其余的索引数据并将该值附加到字符串中。这样你的问题就会解决。 – Prakash

+0

让我再问你是否没有得到我的答案 – Prakash