【问题标题】:IOS : NSString retrieving a substring from a stringIOS:NSString 从字符串中检索子字符串
【发布时间】:2012-02-13 06:59:12
【问题描述】:

嘿,我正在寻找一种从另一个字符串中提取字符串的方法。它可以是任意长度并且位于字符串的任何部分,因此通常的方法不起作用。

例如 http://bla.com/bla?id=%1234%&something=%888%

我要提取的是从 id=% 到下一个 %。

有什么想法吗?

【问题讨论】:

标签: iphone ios string nsstring


【解决方案1】:

使用 rangeOfString 方法:

NSRange range = [string rangeOfString:@"id=%"];
if (range.location != NSNotFound)
{
   //range.location is start of substring
   //range.length is length of substring
}

然后您可以使用substringWithRange:substringFromIndex:substringToIndex: 方法截断字符串以获得您想要的位。以下是针对您的具体问题的解决方案:

NSString *param = nil;
NSRange start = [string rangeOfString:@"id=%"];
if (start.location != NSNotFound)
{
    param = [string substringFromIndex:start.location + start.length];
    NSRange end = [param rangeOfString:@"%"];
    if (end.location != NSNotFound)
    {
        param = [param substringToIndex:end.location];
    }
}

//param now contains your value (or nil if not found)

或者,这是从 URL 中提取查询参数的通用解决方案,如果您需要多次执行此操作,这可能会更有用:

- (NSDictionary *)URLQueryParameters:(NSURL *)URL
{
    NSString *queryString = [URL query];
    NSMutableDictionary *result = [NSMutableDictionary dictionary];
    NSArray *parameters = [queryString componentsSeparatedByString:@"&"];
    for (NSString *parameter in parameters)
    {
        NSArray *parts = [parameter componentsSeparatedByString:@"="];
        if ([parts count] > 1)
        {
            NSString *key = [parts[0] stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
            NSString *value = [parts[1] stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
            result[key] = value;
        }
    }
    return result;
}

这不会从值中删除 % 字符,但您可以使用

NSString *value = [[value substringToIndex:[value length] - 1] substringFromIndex:1];

或者类似的东西

NSString *value = [value stringByReplacingOccurencesOfString:@"%" withString:@""];

更新: 从 iOS 8+ 开始,有一个名为 NSURLComponents 的内置类可以自动为您解析查询参数(NSURLComponents 在 iOS 7+ 上可用,但查询参数解析功能不是)。

【讨论】:

    【解决方案2】:

    试试这个

    NSArray* foo = [@"10/04/2011" componentsSeparatedByString: @"/"];

    NSString* day = [foo objectAtIndex: 0];

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-05-22
      • 2017-01-04
      • 2013-01-20
      • 2016-04-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多