我有一个小问题,我有一个NSString对象 (\ n“1 Infinite Loop”,\ n“Cupertino,CA 95014”,\ n USA \ n)
我希望第二个双引号中的子字符串和第二个双引号(Ex.Cupertino)的第一个逗号来自此字符串。(注意:我的字符串是动态的)
直到现在我已经使用stringByReplacingOccurrencesOfString
:并且能够获得“1InfiniteLoop”“CupertinoCA95014”USA
但仍然无法得到库比蒂诺。
是否有其他方法可以解决此问题?
答案 0 :(得分:13)
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];
如果嵌套结构不可靠 - 例如,如果字符串中可能存在转义引号字符 - 那么您需要进行一些额外的解析以避免出现问题。