2009-10-23 26 views

Trả lời

12

Nếu tất cả các đế của bạn được phân cách bằng dấu cách, bạn có thể cố gắng lấy một mảng đế bằng cách sử dụng [myString componentsSeparatedByString:@" "]. Sau đó, bạn có thể kiểm tra kết quả của [NSUrl URLWithString:yourSubstring]. Nó sẽ trả về nil nếu chuỗi con không phải là một liên kết chính xác.

+0

Có thể bạn hiểu lầm tôi hoặc có thể tôi đã hiểu lầm bạn nhưng http://www.abc.com chỉ là một ví dụ. Những gì tôi có nghĩa là làm thế nào để có được một chuỗi con có định dạng của một liên kết url từ NSString. Đang chờ trả lời của bạn – ThyPhuong

+0

Hmm ... NSArray * subStrings = [thành phần yourStringSeparatedByString: @ ""]; cho (NSString * subString trong chuỗi con) { nếu ([NSUrl URLWithString: subString]) { NSLog (@ "Chuỗi con này là URL:% @", subString); } } – Morion

+0

Nếu đoạn mã của bạn được phân tách bằng @ "", bạn sẽ thấy trong bảng điều khiển tất cả các phần tử, đó là các URL chính xác. – Morion

0

Một giải pháp có thể có thể sử dụng cụm từ thông dụng. Kiểm tra RegexKit.

+2

Regexp hầu như luôn là giải pháp sai. Đặc biệt các URL trùng khớp là _very_ cứng vì regexp chính xác thực sự dài. Ví dụ: địa chỉ e-mail phù hợp là khó: http://www.regular-expressions.info/email.html –

+0

Điểm được chụp tốt. –

+0

"Một số người, khi đối mặt với một vấn đề, hãy nghĩ rằng" Tôi biết, tôi sẽ sử dụng các biểu thức chính quy. "Bây giờ họ có hai vấn đề." http://regex.info/blog/2006-09-15/247 –

50

Tôi biết đây là một câu trả lời rất muộn, nhưng bạn có thể nhận được chuỗi "http://www.abc.com" với đoạn mã sau:

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

Tất nhiên, bạn vẫn có thể sử dụng một NSString cho điều đó.

+0

Dường như không hoạt động khi chuỗi của tôi ngắn hơn phạm vi, tôi có thể làm gì sau đó? – powtac

+2

Bạn chỉ cần cung cấp cho nó một phạm vi khác nhau. Nó có thể là tốt nhất để kiểm tra chiều dài '[@" Một số chuỗi "chiều dài]' và thêm số đó vào đầu tiên để tìm thứ hai. – Justin

26

Hãy thử điều này:

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

này cũng có thể cố gắng giải quyết vấn đề này:

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]); 
} 

Hy vọng nó sẽ giúp!

2

Tôi thấy PHP substr() thực sự thuận tiện. Kiểm tra NSString category của tôi nếu bạn đang tìm kiếm để có thể làm một cái gì đó như thế này:

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

hoặc

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

Cả hai sẽ cung cấp cho bạn kết quả của http://www.example.com

Dưới đây là một bản sao của đoạn mã có liên quan:

__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; 
} 
2

Đây là phiên bản của tập lệnh ... Hopefu lly nó sạch sẽ và dễ thực hiện. Nó hoạt động substr trong những nhân vật dựa trên giới hạn ... Mine được sử dụng cho một textarea, nhưng rõ ràng có thể được điều chỉnh để textfields :)

-(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; 

    } 

} 
0

Nếu chuỗi đầu vào của bạn có đảm bảo đơn giản (ví dụ như đảm bảo rằng mã thông báo trong chuỗi luôn được mô tả bằng ký tự khoảng trắng) sau đó chia nhỏ ký tự khoảng trắng và kiểm tra từng phần tử cho @"http://" làm tiền tố.

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! 
    } 
} 

Điều này có thể được tối ưu hóa dựa trên nhu cầu của ứng dụng; ví dụ, chọn ngắn mạch vòng lặp khi tìm thấy phần tử hoặc sử dụng các bộ lọc trong BlocksKit để chỉ nhận các phần tử bắt đầu bằng tiền tố. Một giải pháp lý tưởng sẽ phụ thuộc vào bản chất của chuỗi đầu vào và những gì bạn đang cố gắng thực hiện với nó.

Các vấn đề liên quan