2013-06-26 49 views
0

我想解析下面的字符串,以便将每行放入数组中。ios:将字符串解析为数组

我有以下字符串作为的NSString:

(
"2 ripe avocados", 
"1/2 small onion, minced", 
"1 clove garlic, minced", 
"1 small jalape\U00f1o, stems and seeds removed, minced", 
"2 tablespoons cilantro leaves, finely chopped", 
"1 tablespoon of fresh lime juice", 
"1/2 teaspoon coarse salt", 
"A dash of freshly grated black pepper", 
"1 Roma tomato, chopped", 
"4 slices crusty white bread", 
"4 slices Cheddar cheese", 
"Butter, for buttering bread" 
) 

我试过如下:

NSCharacterSet* charset = [NSCharacterSet characterSetWithCharactersInString:@"()"]; 
    NSString *newStr = _recipe.ingredients; 
    newStr = [newStr stringByTrimmingCharactersInSet:charset]; 
    NSArray* array = [newStr componentsSeparatedByString:@"\","]; 
    NSCharacterSet* charset2 = [NSCharacterSet characterSetWithCharactersInString:@"\""]; 
    NSString *ingredientString = [[array objectAtIndex:0] stringByTrimmingCharactersInSet:charset2]; 

    NSLog(@"%@", ingredientString); 

但我得到一个LLDB错误:

-[__NSCFArray stringByTrimmingCharactersInSet:]: unrecognized selector sent to instance 0x200a8d90 

我需要保留配料串?

+1

你可以稍微改变输入字符串,使其适当json和使用json解析器? – Kevin

+0

你可以登录你的'数组'吗? – ggrana

+0

@ggrana无法记录数组,因为newStr = [newStr stringByTrimmingCharactersInSet:charset];导致lldb内存错误 – wwjdm

回答

0

感谢@ggrana,我想出了它。该对象不是String类型,而是NSArray类型。我不需要再解析。我检查了这与

if ([idont isKindOfClass:[NSArray class]]){ 
NSLog(@"*****************YEA %@", idont); 
} 
1

如果你有这样的一个NSString的正是字符串你可以用这个3线将其解析到一个数组:

NSCharacterSet* charset = [NSCharacterSet characterSetWithCharactersInString:@"()"]; 
    str = [str stringByTrimmingCharactersInSet:charset]; 
    array = [str componentsSeparatedByString:@","]; 

我们创建了()字符的characterser,我们在使用的第一行第二行修剪字符串并将其从字符串的开头和结尾删除。

最后一行将创建一个数组使用, separing你的组件,你将有一个数组,在第一位置将包含字符串"2 ripe avocados"

如果它不工作,你希望你可以尝试一些方式像:

NSCharacterSet* charset = [NSCharacterSet characterSetWithCharactersInString:@"()"]; 
    str = [str stringByTrimmingCharactersInSet:charset]; 
    NSArray* array = [str componentsSeparatedByString:@"\","]; 
    NSCharacterSet* charset2 = [NSCharacterSet characterSetWithCharactersInString:@"\""]; 
    [[array objectAtIndex:0] stringByTrimmingCharactersInSet:charset2]; 

但基地来解决你已经有的问题。 :)

希望这对你有所帮助。

+0

好的,我尝试了第一个,我得到了str = [str stringByTrimmingCharactersInSet:charset]的lldb内存问题。不知道为什么。我也将删除所有的空格。每个单词之间有5个空格。 – wwjdm

+0

如果您可以发布更多的代码,我可以更直接地帮助您,但我认为它不会从我发布的内容中改变很多,可能只是一些调整以符合您的情况。 – ggrana

+0

发布了更多代码 – wwjdm

0

尝试NSString-componentsSeparatedByString:。见here。它看起来像要用“,”分隔,请确保您已删除或转义了您的语音标记,并且每个逗号后都没有任何空白字符。

事实上,请注意,您在某些组件中使用了逗号。考虑修改字符串以使用其他分隔字符,例如分号。否则结果将不会是你想要的(例如“1瓣大蒜,切碎”分成两部分,而不是一部分)。