Objective-C的:从NSString的提取子最佳方式吗?(Objective-C: Best

2019-08-31 15:17发布

我有一个空格分隔的字符串如@"abc xyz http://www.example.com aaa bbb ccc"

我怎样才能提取子@"http://www.example.com"的呢?

Answer 1:

我知道这是一个非常晚的答复,但你可以得到串“http://www.abc.com”使用下面的代码:

[@"abc xyz http://www.abc.com aaa bbb ccc" substringWithRange:NSMakeRange(8, 18)]

当然,你仍然可以使用NSString了点。



Answer 2:

试试这个:

       [yourString substringToIndex:<#(NSUInteger)#>];
//or
      [yourString substringFromIndex:<#(NSUInteger)#>];
//or        
      [yourString substringWithRange:<#(NSRange)#>];


Answer 3:

如果所有的子字符串用空格分开,你可以尝试使用获得的子字符串数组[myString componentsSeparatedByString:@" "] 然后,你可以检查的结果[NSUrl URLWithString:yourSubstring] 如果子不是一个正确的链接将返回零。



Answer 4:

这里是我的脚本的版本...希望它的清洁,易于实现。 它基于极限...矿用于textarea中的字符的SUBSTR,但显然可以适用于文本框的:)

 -(BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text
 {

      int maxLength = 100;
      int currentLength = [self.messageField.text length];

      if( currentLength > maxLength )
      {

           NSString *newMessageText = [self.messageField.text substringWithRange:NSMakeRange(0, maxLength)];

           [self.messageField setText:newMessageText];

           return NO;

     }
     else
     {

           return YES;

     }

 }


Answer 5:

这也可以尝试解决此问题:

NSArray  *data = [@"abc xyz http://www.abc.com aaa bbb ccc" componentsSeparatedByString:@" "];

for(NSString* str in data)
{
    if([NSURLConnection canHandleRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:str]]])
        NSLog(@"%@",[[NSString alloc ] initWithFormat:@"Found a URL: %@",str]);
}

希望能帮助到你!



Answer 6:

我发现PHP的substr()真的很方便。 看看我的NSString类 ,如果你正在寻找能够做这样的事情:

substr(@"abc xyz http://www.example.com aaa bbb ccc", 8,-12)

要么

substr(@"abc xyz http://www.example.com aaa bbb ccc", 8, 18)

这两种会给你的结果http://www.example.com

下面是相关的代码的副本:

__attribute__((overloadable))
NSString *substr(NSString *str, int start)
{
    return substr(str, start, 0);
}

__attribute__((overloadable))
NSString *substr(NSString *str, int start, int length)
{
    NSInteger str_len = str.length;
    if (!str_len) return @"";
    if (str_len < length) return str;
    if (start < 0 && length == 0)
    {
        return [str substringFromIndex:str_len+start];
    }
    if (start == 0 && length > 0)
    {
        return [str substringToIndex:length];
    }
    if (start < 0 && length > 0)
    {
        return [[str substringFromIndex:str_len+start] substringToIndex:length];
    }
    if (start > 0 && length > 0)
    {
        return [[str substringFromIndex:start] substringToIndex:length];
    }
    if (start > 0 && length == 0)
    {
        return [str substringFromIndex:start];
    }
    if (length < 0)
    {
        NSString *tmp_str;
        if (start < 0)
        {
            tmp_str = [str substringFromIndex:str_len+start];
        }
        else
        {
            tmp_str = [str substringFromIndex:start];
        }
        NSInteger tmp_str_len = tmp_str.length;
        if (tmp_str_len + length <= 0) return @"";
        return [tmp_str substringToIndex:tmp_str_len+length];
    }

    return str;
}


Answer 7:

一个可能的解决办法可能是使用正则表达式。 退房RegexKit 。



Answer 8:

如果您的输入字符串具有简单的担保(例如,字符串总是被一个空格字符划定令牌的担保),然后拆分的空格字符和测试每个元素@"http://"作为前缀。

NSString *input = @"abc xyz http://www.example.com aaa bbb ccc";

NSArray *parts = [input componentsSeparatedByString:@" "];
for (NSString *part in parts) {
    if ([part hasPrefix:@"http://"]) {
        // Found it!
    }
}

这可以优化此基础上应用的需求; 例如,一旦元素被发现选择短路回路,或者使用过滤器BlocksKit只得到以前缀开头的元素。 一个理想的解决方案将取决于输入字符串的性质和你想用它来完成的任务。



文章来源: Objective-C: Best way to extract substring from NSString?