如何从字符串中获取子串?

时间:2010-06-10 10:50:35

标签: iphone cocoa-touch iphone-sdk-3.0 nsstring substring

我有一个小问题,我有一个NSString对象 (\ n“1 Infinite Loop”,\ n“Cupertino,CA 95014”,\ n USA \ n)

我希望第二个双引号中的子字符串和第二个双引号(Ex.Cupertino)的第一个逗号来自此字符串。(注意:我的字符串是动态的)

直到现在我已经使用stringByReplacingOccurrencesOfString:并且能够获得“1InfiniteLoop”“CupertinoCA95014”USA

但仍然无法得到库比蒂诺。

是否有其他方法可以解决此问题?

2 个答案:

答案 0 :(得分:13)

使用substringWithRange:

NSRange r = NSMakeRange(20, 29);
NSString *cup = [yourString substringWithRange: r];

在你的评论中解释后,我会说

NSString *cup = (NSString*)[[yourString componentsSeparatedByCharactersInSet: [NSCharacterSet characterSetWithCharactersInString: @",\""]] objectAtIndex: 4];

答案 1 :(得分:1)

这很大程度上取决于原始字符串结构与分隔字符的一致性。

如果它总是完全发布,luvieere的答案非常好而且紧凑。

如果布局总是一致的,但每个字符串的内容可能不一致 - 例如,如果第一个地址行可能包含逗号 - 最好使用两个通道:

// remember, kids: hard coded number literals are evil
NSString* secondQuotedString = (NString*)[[componentsSeparatedByString:@"\""] objectAtIndex:3];
NSString* upToComma = (NString*)[[componentsSeparatedByString:@","] objectAtIndex:0];

如果嵌套结构不可靠 - 例如,如果字符串中可能存在转义引号字符 - 那么您需要进行一些额外的解析以避免出现问题。