Почему NSScanner не находит первое вхождение целевой строки?
У меня есть приложение Obj-c, которое работало; сейчас это не так. Это часть строки, которую я пытаюсь проанализировать:
http://cdn.openisbn.com/images/no_book_cover.jpg'); border: solid 1px # 383c40; "src = / cover / 0345377443_220.jpg width = 220 border = 0 title =" Женщины, которые бегают с волками: мифы и истории Архетип дикой женщины "> div>Авторы: Кларисса Пинкола Эстес
Издатель: Ballantine КнигиЧерез несколько тысяч символов появляется этот текст:
2016-08-05 20:20div>
http://cdn.openisbn.com/images/no_book_cover.jpg');"; src=/cover/006251380X_72.jpg width=72 height=114 border=0 title="Верный садовник: мудрый рассказ о том, что никогда не умрет">
Верный садовник: мудрый рассказ о том, что никогда не умрет
http://cdn.openisbn.com/images/no_book_cover.jpg'); "Это мой код, чтобы найти заголовок:
[scanner setScanLocation:0]; [scanner setCaseSensitive:NO]; [scanner scanUpToString:@" border=0 title=\"" intoString:nil]; // title scanner.scanLocation += 17; [scanner scanUpToString:@"\">" intoString:&tempString]; oTitle.text = tempString;
Происходит следующее: он пропускает первое вхождение (Women Who Run...) целевой строки и находит второе вхождение (The Faithful Gardner) и возвращает его, а не первое. Поскольку раньше это работало, а я не менял код, может кто-нибудь сказать мне, почему это не работает, и, возможно, предложить некоторые изменения в коде, чтобы он снова заработал? Я был бы очень признателен!
1 ответ
Решение2016-08-06 15:36Причина, по которой он не находит первое вхождение, заключается в том, что этот конкретный экземпляр имеет два пробела между
border=0
а такжеtitle="..."
:<img style="..." src=... width=220 border=0 title="Women Who Run With ...">
Ваш сканер ищет строку только с одним пробелом.
Лично я бы предложил рассмотреть возможность использования HTML-парсера. Это немного пугающе в первый раз, когда вы его используете, но это чрезвычайно мощный и гибкий способ синтаксического анализа HTML, который избавляет вас от множества посимвольных проверок ввода. Он предназначен именно для такой проблемы. Посмотрите TFHpple или руководство Ray Wenderlich о том, как анализировать HTML.