У меня есть строка, разделенная пробелом, например @"abc xyz http://www.example.com aaa bbb ccc"
.
Как извлечь из него подстроку @"http://www.example.com"
?
У меня есть строка, разделенная пробелом, например @"abc xyz http://www.example.com aaa bbb ccc"
.
Как извлечь из него подстроку @"http://www.example.com"
?
Я знаю, что это очень поздний ответ, но вы можете получить подстроку "http://www.abc.com" со следующим кодом:
[@"abc xyz http://www.abc.com aaa bbb ccc" substringWithRange:NSMakeRange(8, 18)]
Конечно, вы можете использовать для этого NSString
.
Попробуйте следующее:
[yourString substringToIndex:<#(NSUInteger)#>];
//or
[yourString substringFromIndex:<#(NSUInteger)#>];
//or
[yourString substringWithRange:<#(NSRange)#>];
Если все ваши подстроки разделены пробелами, вы можете попытаться получить массив подстрок, используя [myString componentsSeparatedByString:@" "]
. Затем вы можете проверить результат
[NSUrl URLWithString:yourSubstring]
. Он будет возвращать нуль, если подстрока не является правильной ссылкой.
Это также может помочь решить эту проблему:
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]);
}
Надеюсь, что это поможет!
Я нахожу 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;
}
Вот моя версия script... Надеюсь, она будет чистой и простой в реализации. Он выполняет подстановку символов на основе ограничений... Mine используется для текстового поля, но, очевидно, может быть адаптирован к текстовым полям:)
-(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;
}
}
Возможное решение может заключаться в использовании регулярных выражений. Проверьте RegexKit.
Если ваша строка ввода имеет простые гарантии (например, гарантию того, что токены в строке всегда обозначаются символом пробела), затем разбивается на символ пробела и проверяет каждый элемент для @"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 для получения только элементов, начинающихся с префикса. Идеальное решение будет зависеть от характера входной строки и того, что вы пытаетесь выполнить с ней.