修剪对象中的每个字符串

时间:2011-05-18 12:38:22

标签: iphone objective-c string

我有一个XML解析器,我想在它转到app delegate之前修剪空格和新行。我知道它只适用于字符串,但如何对象内部的元素。 更重要的是这样做是否明智,或者更好地进行单独的修剪

newString =[menu.enable stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];

2 个答案:

答案 0 :(得分:3)

- (void) parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName{


NSString *trimmedValue=[currentElementValue stringByTrimmingCharactersInSet:
                                [NSCharacterSet whitespaceAndNewlineCharacterSet]];


        //NSLog(@"current value:%@",currentElementValue);
        [aFile setValue:trimmedValue forKey:elementName];

}

它将修剪每个元素,然后将其保存到对象中。这里,aFile是对象

答案 1 :(得分:1)

我自己也遇到了这个问题,并不是一件轻而易举的事。 SriPriya的解决方案有效,但前提是元素内容中没有换行符。这样:

<foo>
    hello
    hi
</foo>
将(IIRC)作为

出现
@"hello\n    hi"

以这种方式修剪。

我提出解决这个问题的解决方案(并且可能有更优雅的解决方案 - 我很满意)如下:

假设您正在使用NSXMLParser和一个处理实际解析的委托类(如上面的SriPriya示例),-parser:foundCharacters:方法所在的位置,您可以这样做:

- (NSString *)removeNewlinesAndTabulation:(NSString *)fromString appending:(BOOL)appending
{
    NSArray *a = [fromString componentsSeparatedByString:@"\n"];
    NSMutableString *res = [NSMutableString stringWithString:appending ? @" " : @""];
    for (NSString *s in a) {
        s = [s stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
        if (s.length > 0 
            && res.length > (appending ? 1 : 0)) [res appendString:@" "];
        [res appendString:s];
    }
    return res;
}

- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string 
{   
    if (! currentElementValue) {
        currentElementValue = [[NSMutableString alloc] initWithString:[self removeNewlinesAndTabulation:string appending:NO]];
    } else {
        [currentElementValue appendString:[self removeNewlinesAndTabulation:string appending:currentElementValue.length > 0]];
    }
}

我知道这看起来很像很简单的代码,但它会正确转向

<foo>
  hi there all
  i am typing some
     stuff
</foo>

@"hi there all i am typing some stuff"

这听起来像你正在寻找的。