为什么NSScanner找不到第一次出现的目标字符串?

时间:2016-08-05 20:20:31

标签: objective-c ios9.3 nsscanner

我有一个正在运行的Obj-c应用程序;现在不是。这是我要解析的字符串部分:

  

< div class =“PostContent”>< div class =“Article”>< div class =“Post”>< div class =“PostContent”> < div>< img style =“background-image:url('http://cdn.openisbn.com/images/no_book_cover.jpg'); border:solid 1px#383c40;”src = / cover / 0345377443_220.jpg width = 220 border = 0 title =“与狼一起奔跑的女人:狂野女人的神话和故事Archetype“>< / div>作者:< a href =”/ author / Clarissa_Pinkola_Estes /“> Clarissa Pinkola Estes< / a>< BR>出版商:< a href =“/ publisher / Ballantine_Books /”> Ballantine Books< / a>

后来几千个字符,出现了这个文字:

  

< div class =“block”id =“LayoutColumn_3”>< div class =“blockTop”>< / div>< h2< / h2>< div align =“center”> < a href =“/ isbn / 006251380X /”>< img style =“padding:1px; border:1px solid#6c6c6c; background-image:url('http://cdn.openisbn.com/images/no_book_cover.jpg');” src = / cover / 006251380X_72.jpg width = 72 height = 114 border = 0 title =“忠实的园丁:一个关于永不死的聪明故事”>< / a>< BR>< a href = “/ isbn / 006251380X /”>忠实的园丁:一个关于永远不会死的聪明的故事< / a><>< a href =“/ isbn / 1604076356 /”>< img style =“ padding:1px; border:1px solid#6c6c6c; background-image:url('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;

正在发生的事情是它正在跳过目标字符串的第一次出现(女性运行...... )并找到第二次出现(T 他忠实的加德纳)和返回它而不是第一个。由于这曾经工作,而且我没有更改代码,有人可以告诉我为什么这不起作用并可能建议对代码进行一些更改以使其再次运行?我真的很感激!

1 个答案:

答案 0 :(得分:1)

它没有找到第一次出现的原因是该特定实例似乎在border=0title="..."之间有两个空格:

<img style="..." src=... width=220  border=0  title="Women Who Run With ...">

您的扫描仪正在寻找只有一个空格的字符串。

就个人而言,我建议考虑使用HTML解析器。第一次使用它时有点令人生畏,但它是一种非常强大且灵活的解析HTML方式,让你摆脱了逐字符扫描输入的杂草。它正是为这类问题而设计的。请参阅TFHppleRay Wenderlich tutorial on how to parse HTML