gpt4 book ai didi

objective-c - whitespaceAndNewlineCharacterSet 似乎在删除特殊字符前的空格

转载 作者:行者123 更新时间:2023-11-28 23:07:32 34 4
gpt4 key购买 nike

我正在使用 NSXMLParser 来解析 rss 提要。但是我得到了一些奇怪的行为,我相信我已经缩小到 stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]

如果我有这样一个句子:

你好,我叫“桑尼”。

它最终会像这样显示:

你好,我叫“桑尼”。

这是我的foundCharacters 方法:

- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string { 
if(!currentNodeContent)
currentNodeContent = [[NSMutableString alloc] initWithString:string];
else
{
[currentNodeContent appendString:string];
NSString *trimmedString = currentNodeContent;
trimmedString = [trimmedString stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
[currentNodeContent setString:trimmedString];
}
}

我尝试将 whitespaceAndNewlineCharacterSet 更改为 newlineCharacterSet,这解决了问题,但导致出现各种不需要的空白和回车。关于为什么会发生这种情况以及我可以做些什么来解决它有什么想法吗?

更新

所以我根据下面德克的回答更新了我的代码,这似乎很好地解决了问题。

- (void) parser:(NSXMLParser *)parser didEndElement:(NSString *)elementname namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
{
if ([elementname isEqualToString:@"item"])
{
[comments addObject:currentComment];
currentComment = nil;
}

NSString *trimmedString = [tempString stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
[currentNodeContent setString:trimmedString];
tempString = nil;
currentNodeContent = nil;
}

- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string {
if(!currentNodeContent) {
currentNodeContent = [[NSMutableString alloc] initWithString:string];
tempString = [[NSMutableString alloc] init];
} else {
[tempString appendString:string];
}
}

最佳答案

在这样的情况下:

<element>Some Content</element>

您不应该完全依赖于接收以下事件序列:

  • startElement “元素”
  • characterData “一些内容”
  • endElement "元素"

它也可以(取决于解析器的内部,如缓冲区大小等):

  • startElement “元素”
  • characterData “所以”
  • characterData "我继续`
  • characterData "ent"
  • endElement "元素"

为了安全起见,您应该简单地存储收到的字符,直到看到元素结束事件,然后才对结果应用修剪操作。

From the NSXMLParser documentation :

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.

关于objective-c - whitespaceAndNewlineCharacterSet 似乎在删除特殊字符前的空格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9069267/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com