搜索NSString中的单词

时间:2011-04-06 08:08:24

标签: iphone objective-c nsstring

我收到一个请求数据并将其放入NSString中。之后,我得到以下字符串,

  

_ VIEWSTATE =%2FwEPDwULLTE1MjI5NTA5MzBkZBfGgdOVhk6K8WsSgq64ngCpAncw&安培; _EVENTVALIDATION =%2FwEWBgKdhbkbAvOQn7cGApKGyNkMAsKL2t4DApSbgLYHArS6otoP2nSQkmm0E6zJe2u91W5ntimqJ18%3D&安培; X - 轮辋队列-ID = MyOfflineQueue&安培; form_id = 723&安培; TXT2 = siddhesh.b.chavan%40gmail.com&安培; btnSubmit按钮=提交&安培; X-rim1-request1标题= SignatureShouldBeDoneHere&安培; X - 轮辋请求所有权= iPhone3的+ 4%2F6%2F2011 + 3%3A57 3A21%+ AM

我要问的是,我想从这个字符串中获取“form_id”,即“723”。 那么,我该怎么做? 我想每次都获得一个请求的form_ID。所以,请帮助我解决这个问题。

感谢你。

5 个答案:

答案 0 :(得分:2)

这些选项更适用于您尝试执行的URL参数解析。

1。范围搜索:单词,字符

效率最高但写作很挑剔...(并阅读!)

请参阅rangeOfString:及其有关NSString文档的朋友

2。分割

写作快速而优雅,但效率不高

由于它是一个URL参数样式字符串,因此可以通过分割&=轻松解析,可以使用componentsSeparatedByString:componentsSeparatedByCharactersInSet:

3。正则表达式

干净的代码,强大的

正则表达式是操作文本的最佳选择,但它们比以前的解决方案更难以使用/学习。要使用正则表达式,我建议两个选项:

  1. iPhone OS> = 3.2有正则表达式:

    NSString rangeOfString:options:NSRegularExpressionSearch

    但这与选项1接近。

  2. RegexKitLit,在OSX / iOS上提供了一个出色的正则表达式引擎,可以为你的问题提供最好和最强大的解决方案(还有很多其他!!!)......
  3. 4。其他套件/ API / SDK

    缺少的api / toolkit / sdk?不要写成千上万的人写过的代码......

    1. 我希望NSURL支持URL参数,用于解析和构建网址......但事实并非如此。
    2. 我不知道一个好的URL解析/工具箱库提供了这样的URL Arguments操作工具(Google Toolbox不提供这样的URL参数工具except for escaping已经非常有用)但我确信存在!一个好的库,经过测试和可靠的代码将是您最好的解决方案......
    3. 5。其他......有很多

      我忘了提及我从未真正研究过的NSScanner(坏我) 更一般地说,Apple documentation on this topic很有意思。

答案 1 :(得分:0)

试试这个:

[myString substringToIndex:index];
[myString substringFromIndex:index];
[myString substringWithRange:range];

或者

if ( [yourString rangeOfString:@"form_id"].location == NSNotFound )
{
NSLog(@"form_id not found");
}

答案 2 :(得分:0)

使用'rangeOfString:options:range:'首先搜索整个字符串中的“form_id =”,然后从找到的位置搜索“&”。您将需要处理未找到&符号的情况(当form_id是列表中的最后一个时)。

答案 3 :(得分:0)

如果你想尝试这个:让我知道它是否有效。

NSInteger formId;
//separate the whole string first by "&" characters
NSArray *array = [myString componentsSeparatedByString:@"&"];
for (NSString *queryString in array)
{
    //for every separated string, look if you have the "form_id" key
    NSRange range = [queryString rangeOfString:@"form_id=" options:NSLiteralSearch];
    if (range.location != NSNotFound)
    {
       NSLog(@"form_id query string does exist");
       //form_id= has 7 characters, pick the character which comes after the "=" sign.
       NSString *value = [queryString substringFromIndex:8];
       formId = [value integerValue];
    }
}

该解决方案假设您只有1“form_id”。

答案 4 :(得分:0)

您也可以使用NSScanner对象。喜欢 -

NSScanner *scanner = [NSScanner scannerWithString:reqData];  
[scanner scanUpToString:@"form_id" intoString:nil];  
[scanner scanUpToString:@"&" intoString:&strObj];  
valueStr = [strObj substringFromIndex:1];