NSCharacterSet剪切字符串

时间:2012-04-27 02:15:34

标签: objective-c nscharacterset

我正在收到最新的推文并在我的应用中显示。我把它放在一个NSMutableString中,并在我的xmlparser.m文件中初始化该字符串,如下所示:

- (void) parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
{
    currentNodeContent = (NSMutableString *) [string stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
}

我可以收到推文但不知何故它会削减一些推文并显示部分内容。例如,推文是

  

教室里的电子游戏?社交媒体& #technology可以改变教育http://bit.ly/KfGViF @GOVERNING #edtech

但它显示的是:

  

#technology可以改变教育http://bit.ly/KfGViF @GOVERNING #edtech

为什么你认为它是?我尝试以其他方式初始化currentNodeContent,但我无法解决问题。

你知道为什么会这样吗?

2 个答案:

答案 0 :(得分:1)

事件驱动(SAX)解析器可以自由返回回调中节点的部分文本。您可能只是传入的推文的一部分。您应该在可变字符串中累积字符,直到您获得指示元素结尾的回调。请参阅清单3以及this guide中的周围文本。

答案 1 :(得分:0)

你有两个问题:

- (void) parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
{
    currentNodeContent = (NSMutableString *) [string stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
}

简单地将NSString投射到NSMutableString不起作用。您必须自己制作可变副本,或使用NSMutableString的内容初始化新的NSString

此外,文本解析器只提供字符串的最后一部分,因为它可能只是将“&”解释为实体引用的一部分,或者它本身可能是实体引用。

您可能想要做的是:

  1. 在开始解析之前,请初始化currentNodeContent,使其为空NSMutableString

    currentNodeContent = [NSMutableString string];
    
  2. 在解析时,字符附加到currentNodeContent

    [currentNodeContent appendString:[string stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];