我创建了一个RSS阅读器,我正在解析描述,但描述中有HTML标签,所以我用以下方法创建了一个NSString类别来清除标签:
- (NSString *)stripTags:(NSString *)str
{
NSMutableString *html = [NSMutableString stringWithCapacity:[str length]];
NSScanner *scanner = [NSScanner scannerWithString:str];
scanner.charactersToBeSkipped = NULL;
[scanner setCharactersToBeSkipped:nil];
NSString *tempText = nil;
while (![scanner isAtEnd])
{
[scanner scanUpToString:@"<" intoString:&tempText];
if (tempText != nil)
[html appendString:tempText];
[scanner scanUpToString:@">" intoString:NULL];
if (![scanner isAtEnd])
[scanner setScanLocation:[scanner scanLocation] + 1];
tempText = nil;
}
return html;
}
这适用于删除HTML标记,这不是问题。问题是我的描述设置为最多100个字符,但它仍在计算该字符数中删除的HTML标记。所以有些描述根本没有显示,或者有些描述很短。我需要知道如何删除HTML标记,以便它们不会占用任何字符数。
如果您需要,我在这里设置我的描述:
NSString *dots;
int length = [self.description length];
if (length > 100)
{
length = 100;
dots = [NSString stringWithFormat:@"..."];
}
else
{
dots = [NSString stringWithFormat:@""];
}
NSString *description = [NSString stringWithFormat:@"%@%@", [self.description substringToIndex:length], dots];
答案 0 :(得分:1)
这似乎是因为您使用第一行从原始字符串设置字符串的容量。
NSMutableString *html = [NSMutableString stringWithCapacity:[str length]];
我认为这会设置最小容量大小,虽然它可以自由地增长,但它不能缩小到新的大小。
快速修复可能是将最初的长度设置为1或小于预期的最小文本。
示例:
NSMutableString *html = [NSMutableString stringWithCapacity:1];
你可以简单地使用:
NSMutableString *html = [[NSMutableString alloc] init];
我尝试使用此代码,它的工作原理与
完全相同NSMutableString *html = [[NSMutableString alloc] init];
NSLog(@"Before: %u", [html length]);
NSScanner *scanner = [NSScanner scannerWithString:@"<a>this is a test</a>"];
scanner.charactersToBeSkipped = NULL;
[scanner setCharactersToBeSkipped:nil];
NSString *tempText = nil;
while (![scanner isAtEnd])
{
[scanner scanUpToString:@"<" intoString:&tempText];
if (tempText != nil)
[html appendString:tempText];
[scanner scanUpToString:@">" intoString:NULL];
if (![scanner isAtEnd])
[scanner setScanLocation:[scanner scanLocation] + 1];
tempText = nil;
}
NSLog(@"After: %u", [html length]);