iOS 去掉html标签 留下原本的字符串

  做开发有的时候会遇到服务器返回的数据是html的,我们可以选择直接用webview来加载的方式去处理,当然这个方法不适用所有场景,通常我们会选择把没有必要的html标签去掉留下需要的文字信息,现在一起来看看吧。

首先提供一个html标签的字符串 

   NSString *html = @"<p><span style="font-family:宋体">劳动是人类创造物质或精神财富的活动,有体力的,也有脑力的。我们自己是劳动者,也是别人劳动的见证者。劳动存在于现在,也存在于过去和未来。劳动的人有不同,劳动的对象有不同,劳动的方式有不同,劳动的环境有不同</span>……<span style="font-family:宋体">于是,劳动的滋味也有不同。劳动很重要,品味劳动的滋味也很重要。你对劳动有怎样的体验或感悟?请以</span>“<span style="font-family:宋体">品味劳动</span>”<span style="font-family:宋体">为题写一篇不少于</span>800<span style="font-family:宋体">字的作文,除诗歌外文体不限。</span></p><p><br/></p>";

然后提供一个方法 

-(NSString *)filterHTML:(NSString *)html
{
    NSScanner * scanner = [NSScanner scannerWithString:html];
    NSString * text = nil;
    while([scanner isAtEnd]==NO)
    {
        [scanner scanUpToString:@"<" intoString:nil];
        [scanner scanUpToString:@">" intoString:&text];
        html = [html stringByReplacingOccurrencesOfString:[NSString stringWithFormat:@"%@>",text] withString:@""];
    }
    return html;
}

执行完毕后会得到需要的 信息,而没有出现html标签。

这样就结束了一点意义没有,那么现在让我们一起来看NSScanner的用法吧。

NSScanner是一个类,用于在字符串中扫描指定的字符,翻译成我们需要的字符串或者数字,核心就是位置的移动 即scanLocation的移动变化

在上面的方法中首先指明了要扫描的对象 html(NSString) NSString * text 很重要 把我们要扫描出来的字符串存到text里面

而这个扫描到的字符串就是>之前的字符串 scanUpToString这个方法的意思是将scanLocation停留在>之前 并把之前的字符串传给text。

回头来看看我们去除html标签的方法 整个过程都是在扫描过程中进行的NSScanner在执行scanUpToString这个方法时一旦扫描到需要的字符串比如例子中的“<”,其scanLocation就会变为html的初始位置。所以,要在执行完一次完整的扫描后 把html标签用空字符串替换掉,在进行下一次扫描,也就是说再while中 html字符串的标签字符会越来越少,而每次扫描的初始位置相对没有变化都停留在上一次扫描结束的位置,即"<"标签的前面。

有关NSScanner的更好的介绍 参考链接http://blog.csdn.net/likendsl/article/details/7974761

原文地址:https://www.cnblogs.com/machealking/p/4647012.html