【问题标题】:How to get a Substring from a String?如何从字符串中获取子字符串?
【发布时间】:2010-06-10 10:50:34
【问题描述】:

我有一个小问题,我有一个 NSString 对象 (\n "1 Infinite Loop",\n "Cupertino, CA 95014",\n 美国\n)

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

到目前为止,我已经使用 stringByReplacingOccurrencesOfString: 并且能够获得 "1InfiniteLoop""CupertinoCA95014"USA

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

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

【问题讨论】:

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


    【解决方案1】:

    使用substringWithRange:

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

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

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

    【讨论】:

    • hi luvieere,感谢您的回复,但我想在第二个双引号和第一个双引号逗号的开头(Ex.Cupertino)中获取子字符串,因为我的字符串是动态的,所以我不能修复它的范围。
    • @raaz 查看新解决方案
    【解决方案2】:

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

    如果它总是完全如发布的那样,luvieere 的回答非常好和紧凑。

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

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

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

    【讨论】:

      猜你喜欢
      • 2011-11-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-25
      • 2015-11-04
      • 2015-08-21
      • 1970-01-01
      相关资源
      最近更新 更多