0

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

我有以下字符串作为 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

我需要保留配料串吗?

4

3 回答 3

1

如果你在 NSString 中有这个确切的字符串,你可以用这 3 行将它解析为一个数组:

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

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

最后一行将创建一个数组来分隔您的组件,,您将拥有一个数组,在第一个位置将包含字符串"2 ripe avocados"

如果它没有按照您期望的方式工作,您可以尝试以下操作:

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

但是你已经有了解决问题的基础。:)

希望这对您有所帮助。

于 2013-06-26T00:38:25.970 回答
0

试试吧NSString-componentsSeparatedByString:这里。看起来您想用“,”分隔,请确保您已删除或转义了语音标记,并且每个逗号后没有任何杂散的空白字符。

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

于 2013-06-26T00:38:51.940 回答
0

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

if ([idont isKindOfClass:[NSArray class]]){
 NSLog(@"*****************YEA %@", idont);
}
于 2013-06-26T19:05:08.667 回答