iOS 数据优化之处理HTML字符串

iOS 数据优化之处理HTML字符串,第1张

富文本转html字符

字符串转富文本

最近项目遇到的问题,因为后台返回的数据是HTML字符串,所以就按照常规处理方式把HTML字符串转换成富文本的字符串来处理,事实证明,tableview会非常卡,并且造成线程阻塞,无法响应事件

解决方案1首先我想到的是把耗时 *** 作放在子线程来 *** 作

解决方案2 因为是cell展示,所以只需要展示文本信息就行,那就过滤掉HTML标签,瞬间解决所有问题。所以在列表展示数据的时候HTML转换NSAttributedString一定要慎用

下面简单介绍一下NSScanner

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

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

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

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

参考链接----传送门

方法如下:

1、创建字符串

1)NSSring str = @”adf”;

2)NSString str1 = [NSString new];

NSString str2 = [[NSString alloc] initWithString:@”adf”] 等同于1)

4)NSString str3 = [NSString stringWithFormat:@”name is %@”,@”小小”]

5)char c = “小小”;

NSString str4 = [[NSString alloc] initWithCString:c encoding:nil]

2、获取字符串(截取后创建了新的字符串,不改变原来的字符串)

NSString str = @”>

- (NSArray )componentsSeparatedByString:(NSString )separator;

这个方法是:根据你选定的NSString(separator)分割符来拆分你想要拆分的字符串。

就是[@"abc ak123" componentsSeparatedByString:@" " ];

分割之后是一个数组,你需要那一部分就取哪一部分。

1截取字符串

NSStringstring =@"sdfsfsfsAdfsdf";

string = [string substringToIndex:7];//截取掉下标7之后的字符串

NSLog(@"截取的值为:%@",string);

[string substringFromIndex:2];//截取掉下标2之前的字符串

NSLog(@"截取的值为:%@",string);

2匹配字符串

NSStringstring =@"sdfsfsfsAdfsdf";

NSRangerange = [stringrangeOfString:@"f"];//匹配得到的下标

NSLog(@"rang:%@",NSStringFromRange(range));

string = [string substringWithRange:range];//截取范围类的字符串

NSLog(@"截取的值为:%@",string);

3分隔字符串

NSStringstring =@"sdfsfsfsAdfsdf";

NSArray array = [string componentsSeparatedByString:@"A"]; //从字符A中分隔成2个元素的数组

NSLog(@"array:%@",array); //结果是adfsfsfs和dfsdf

>

1定义一个字符串a, 截取a 的某一个部分,复制给b, b必须是int型

NSString a = @"1230";

int b= [[a substringWithRange:NSMakeRange(4,2)] intValue];

NSLog(@"a:%@ \n",a );

NSLog(@"b:%d",b );

Output : 2011-07-05 11:49:08170 Q[4005:207] a:1230

2011-07-05 11:49:08172 Q[4005:207] b:30

解析如下:substringWithRange: 专门截取字符串的一块肉

NSMakeRange(4,2) 从第4个字符开始截取,长度为2个字符,(字符串都是从第0个字符开始数的哦~!)

b = [a intValue]; 将 a 转换为 整数型

b = [a floatValue]; 将 a 转换为 小数型

b = [a boolValue]; 将 a 转换为 布尔型(true / false)

b = [a integerValue]; 将 a 转换为 整数型

b = [a longLongValue]; 将 a 转换为 长整型

2。 字符串截取到第n位 (substringToIndex: n)(第n 位不算再内)

- (void)viewDidLoad

{

NSString a = @"i like long dress";

NSString b = [a substringToIndex:4];

NSLog(@"\n b: %@",b);

}

2011-07-11 18:12:40119 Q[6321:207]

b: i li

3。字符串从第n 位开始截取,直到最后 (substringFromIndex:n)(包括第 n 位)

- (void)viewDidLoad

{

NSString a = @"i like long dress";

NSString b = [a substringFromIndex:4];

NSLog(@"\n b: %@",b);

}

2011-07-11 18:15:08125 Q[6366:207]

b: ke long dress

其实动态获取字符串NSString的内容宽度高度最主要的还是API NSString类提供的一个方法:

sizeWithFont: constrainedToSize

例如:

CGSize feelSize = [feeling sizeWithFont:[UIFont systemFontOfSize:12] constrainedToSize:CGSizeMake(190,200)];

float feelHeight = feelSizeheight;

这样就可以根据自己定义的长高的最大限值来获取当前文本的size。

以上就是关于iOS 数据优化之处理HTML字符串全部的内容,包括:iOS 数据优化之处理HTML字符串、如何将 NSCFString 转换 到的 NSString、IOS中有一个不定长度字符串,但是如何获取空格后面的字符串如:abc ak123等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/9626364.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-30
下一篇2023-04-30

发表评论

登录后才能评论

评论列表(0条)

    保存