Вырежьте часть длинной строки NSString - PullRequest
0 голосов
/ 20 августа 2011

В моем приложении я хочу показать строку, содержащую новости. Эта строка загружается только с бесплатного веб-сайта, поэтому простой исходный код веб-сайта содержит не только мою строку, она выглядит примерно так:

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

И, конечно же, я хочу отключить все HTML-материалы, которые мне не нужны в моей строке NSString. Поскольку я собираюсь время от времени изменять строку String, общая длина исходного кода с веб-сайта изменяется. Это означает, что substringFromIndex не будет работать. Есть ли другой способ конвертировать полный исходный код в строку, которая мне нужна?

Ответы [ 2 ]

2 голосов
/ 20 августа 2011

Есть миллионы способов манипулировать текстом. Я бы начал с регулярных выражений. Если вы дадите более подробную информацию об особенностях вашей проблемы, вы можете получить более конкретную помощь.

Редактировать

Спасибо за ссылку на сайт. Это дает мне больше работы. Если вы всегда будете знать идентификатор div, содержимое которого вы хотите, вы можете использовать NSXMLParser для извлечения текста div. Это установит текст NSTextField на содержимое div с идентификатором «I3_sys_txt». Я сделал это на 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];
    }
}
0 голосов
/ 21 августа 2011

Вот класс NSRegularExpression, который вам нужно использовать: NSRegularExpression

Вот учебник для начинающих по использованию класса: Учебник

Вот пример того, что такое регулярные выражения: Пример регулярного выражения

Вот онлайн-тестер регулярных выражений: Tester

Тестер может работать не совсем так, как NSRegularExpression, но он поможет вам понять определения регулярных выражений в целом.Регулярные выражения - это ключевой инструмент для разработчиков программного обеспечения, поначалу немного пугающий, но они могут быть очень полезны при поиске или манипулировании строками.

Хотя это выглядит как большая работа - «быстрого»ответьте на то, что вы пытаетесь.Вы говорите: «Есть ли другой способ преобразовать полный исходный код в нужную мне строку?»- ответ да - регулярные выражения. Но вам нужно определить, что означает «просто нужная мне строка», и регулярные выражения - один из важных способов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...