代码之家  ›  专栏  ›  技术社区  ›  raaz

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

  •  1
  • raaz  · 技术社区  · 15 年前

    我有一个小问题,我有一个nsstring对象 (\n“1无限循环”,\n“cupertino,ca 95014”,\n美国\n)

    我希望子字符串出现在该字符串的第二个双引号和第二个双引号(如cupertino)的第一个逗号中。(注意:我的字符串是动态的)

    直到现在我都用过 stringByReplacingOccurrencesOfString :并能够获得“1infiteloop”“cupertinoca9504”美国

    但还是不能得到库比蒂诺。

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

    2 回复  |  直到 12 年前
        1
  •  13
  •   luvieere    15 年前

    使用A substringWithRange: :

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

    在你评论的解释之后,我想说

    NSString *cup = (NSString*)[[yourString componentsSeparatedByCharactersInSet: [NSCharacterSet characterSetWithCharactersInString: @",\""]] objectAtIndex: 4];
    
        2
  •  1
  •   walkytalky    15 年前

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

    如果总是这样的话 确切地 正如贴上的,卢维埃的回答是非常好和紧凑的。

    如果布局始终一致,但每个字符串的内容可能不一致(例如,如果第一个地址行可能包含逗号),则最好使用两个传递:

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

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

    推荐文章