项目开发中, 从服务器请求的数据可能会是带有HTML标签的网页代码, 但当前场景又不适合用webView来加载. 所以就要把HTML标签去掉留下需要的字符串信息.
- 从服务器拿到的带有HTML标签的字符串
"<span style=\"font-size:16px;\">端午节即将到来,祝各位投资人假期愉快,期间平台放假及业务规划如下:</span><br /><span style=\"font-size:16px;\"> </span><br /><span style=\"font-size:16px;\">1、端午节假期放假时间为:2017年5月28日——2017年5月30日,共3天,5月31日开始上班;</span><br /><br /><span style=\"font-size:16px;\">2、2017年5月27日(含27日)之后的普通提现申请,将在5月31日统一处理,请您提前合理安排资金;</span><br /><br /><span style=\"font-size:16px;\">3、2017年5月28日——2017年5月30日不支持加急提现;</span><br /><br /><span style=\"font-size:16px;\">4、假期充值和还款均正常进行,不受影响;</span><br /><br /><span style=\"font-size:16px;\">5、如您在放假期间遇到任何问题,可随时拨打我们的客服热线(400-691-7677),我们将竭诚为您服务。</span><br /><span style=\"font-size:16px;\"></span>"
- 使用NSScanner去掉HTML标签
-(NSString *)removeHTML:(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;
}
以上方法会循环的搜索字符串中的<***>,并赋值给text参数。
这个时候isAtEnd便会紧接上一次搜索到的字符位置继续搜索看是否存在下一个<***>,直至扫描结束。
扫描动作的核心就是位置的变动。位置不停地在扫描中移动,直至结束扫描。
- 执行后得到的结果,没有了HTML标签
"端午节即将到来,祝各位投资人假期愉快,期间平台放假及业务规划如下: 1、端午节假期放假时间为:2017年5月28日——2017年5月30日,共3天,5月31日开始上班;2、2017年5月27日(含27日)之后的普通提现申请,将在5月31日统一处理,请您提前合理安排资金;3、2017年5月28日——2017年5月30日不支持加急提现;4、假期充值和还款均正常进行,不受影响;5、如您在放假期间遇到任何问题,可随时拨打我们的客服热线(400-691-7677),我们将竭诚为您服务。"
NSScanner是一个类,用于在字符串中扫描指定的字符,尤其是把它们翻译/转换为数字和别的字符串。方法 - (BOOL)scanString:(NSString *)string intoString:(NSString * _Nullable * _Nullable)result 可以获取当前位置的某个字符串的内容。
scanUpToString:intoString:从当前的扫描位置开始扫描,扫描到和传入的字符串相同字符串时,停止,指针指向的地址存储的是遇到传入字符串之前的内容。如果你不想保留这些字符,可以传递一个NULL或nil给第2个参数。