切出长NSString的一部分

时间:2011-08-20 18:10:03

标签: objective-c ios cocoa-touch web nsstring

在我的应用中,我想显示一个包含新闻的字符串。这个字符串只是从一个免费的网站加载,所以网站的普通源代码不仅包含我的字符串,它更像是这样的:

Stuff
More Stuff
More HTML Stuff
My String
More HTML Stuff
Final Stuff

当然我想切断我在NSString中不想要的所有html内容。由于我要及时更改String fron,因此网站源代码的总长度会发生变化。这意味着substringFromIndex无法正常工作。有没有其他方法可以将完整的源代码转换为我需要的字符串?

2 个答案:

答案 0 :(得分:2)

有数以万计的方法来操纵文本。我会从正则表达式开始。如果您提供有关问题细节的更多详细信息,可以获得更具体的帮助。

修改

感谢您访问该网站的链接。这让我有更多的工作。如果你总是知道你想要的div的id,你可以使用NSXMLParser来提取div的文本。这会将NSTextField的文本设置为id为“I3_sys_txt”的div的内容。我在Mac上做过这个,但我相信它也适用于iPhone。

-(IBAction)buttonPressed:(id)sender {
    captureCharacters = NO;
    NSURL *theURL = [NSURL URLWithString:@"http://maxnerios.yolasite.com/"];
    NSXMLParser *parser = [[NSXMLParser alloc] initWithContentsOfURL:theURL];
    [parser setDelegate:self];
    [parser parse];
    [parser release];
}

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qualifiedName attributes:(NSDictionary *)attributeDict {
    if ([elementName isEqual:@"div"] && [[attributeDict objectForKey:@"id"] isEqual:@"I3_sys_txt"]) {
        captureCharacters = YES;
        divCharacters = [[NSMutableString alloc] initWithCapacity:500];
    }
}

- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string {
    if (captureCharacters) {
        //from parser:foundCharacters: docs:
        //The parser object may send the delegate several parser:foundCharacters: messages to report the characters of an element. 
        //Because string may be only part of the total character content for the current element, you should append it to the current 
        //accumulation of characters until the element changes.
        [divCharacters appendString:string];
    }
}

- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName {
    if (captureCharacters) {
        captureCharacters = NO;
        [textField setStringValue:divCharacters];
        [divCharacters release];
    }
}

答案 1 :(得分:0)

以下是您需要使用的NSRegularExpression类:NSRegularExpression

以下是关于如何使用课程的“开始”教程:Tutorial

以下是正则表达式的基础:Regex Primer

这是一个在线正则表达式测试器:Tester

测试人员可能无法完全像NSRegularExpression那样工作,但它可以帮助您理解一般的正则表达式定义。正则表达式对于软件开发人员来说是一个关键工具,起初有点令人生畏,但在搜索或操作字符串时它们可以起到很好的作用。

虽然这看起来很多工作 - 但你没有尝试过“快速回答”。你说“有没有其他方法可以将完整的源代码转换为我需要的字符串?” - 答案是肯定的 - 正则表达式。但你需要定义“我需要的字符串”的意思,正则表达式是一种重要的方式。