2010-06-10 213 views
1

我有一个小问题,我有一个的NSString对象 (\ n “个1无限循环”,\ n “个加利福尼亚Cupertino 95014”,\ n美国\ n)的如何从字符串中获取子字符串?

,我想在本第二内子。双引号,并从该字符串第二个双引号(Ex.Cupertino)的第一个逗号(注:我的字符串是动态)

到现在我已经使用stringByReplacingOccurrencesOfString:并能得到“1InfiniteLoop”“CupertinoCA95014”美国

但仍无法获得库比蒂诺。

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

回答

13

使用substringWithRange:

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

在您的评论的解释后,我会说

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

hi luvieere, 感谢您的回复,但我想要得到第二个双引号和第一个逗号双引号(Ex.Cupertino)开头的子串,因为我的字符串是动态的,所以我无法修复范围它。 – raaz 2010-06-10 11:04:02

+0

@raaz检查看到新的解决方案 – luvieere 2010-06-10 11:35:05

+0

嗨Luvieere,它的工作就像一个魅力。感谢您的帮助 – raaz 2010-06-11 08:50:49

1

这在很大程度上取决于你的原始字符串的结构是如何一致来讲是分隔字符。

如果它总是会正是张贴,luvieere的答案是非常漂亮和紧凑。

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

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

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

相关问题