2015-05-05 3 views
-1

У меня есть строка, такие как:Как получить определенные строки из NSString?

Нитрит натрия E250 является пищевой добавкой, которая дает вяленое мясо, , такое как ветчина E103, бекон, сосиски, сардельки, копченые рыба E1255 солониной, их характерным красным цветом и ароматом.

Мне нужно, чтобы получить NSArray элементов: E250, E103, E1255 из текста выше, и сравнить с моим предопределенного NSArray (E100, E101, E1500 ...) элементы Есть ли какие-либо как это сделать?

+1

Вы ищете все строки с определенным форматом? Или только трое вы заявили? – milesper

+0

Вы можете взглянуть на регулярное выражение, которое позволяет вам извлекать данные для определенного шаблона, в вашем примере это может быть буква E, за которой следуют 3 или более чисел. – Greg

+0

Если вы поддерживаете версию> = 8.0, чем вы можете использовать этот исходный код - [string containsString: @ ""] –

ответ

0

Как вы сказали, вы хотите сравнить с существующим элементом массива. Таким образом, вы можете сделать ниже ..

NSArray *array = @[@"E100", @"E250", @"E103", @"E200", .....]; 
NSString *myString = @"Sodium Nitrite E250 is a food additive that gives cured meats, such as ham E103, bacon, hot dogs, frankfurters, smoked fish E1255 corned beef, their characteristic red colour and flavour."; 

[array enumerateObjectsUsingBlock:^(NSString *objectString, NSUInteger idx, BOOL *stop) { 
    if([myString rangeOfString:objectString].location != NSNotFound) { 
     NSLog(@"%@ - found", objectString); 
    } 
    else { 
     NSLog(@"%@ - Not found", objectString); 
    } 
}]; 
+0

Это решение работает потрясающе. Благодаря! – vbondarenko3d

+0

Приветствую вас ... –

0

Вместо того, чтобы извлекать, что строки из текста я бы порекомендовал вам найти шаблоны из вашего массива, как:

NSString *input = @"Sodium Nitrite E250 is a food additive ..."; 
for (NSString *str in @[ @"E100", @"E101", @"E1500" ]) 
    if ([input rangeOfString:str].location != NSNotFound) { 
     // do something 
    } 
+0

Это ужасно, если у вас есть большой набор строк, против которых вы сравниваете. –

+0

Спасибо, я попробую. В строке содержится 30-50 слов. – vbondarenko3d

+0

@JakubVano, не зная полной задачи, трудно рекомендовать решение высокой производительности. Возможно, что полная архитектура приложения недостаточно хороша и должна быть пересмотрена. Но этот код, по крайней мере, будет работать из коробки – Azat

0

пытаются использовать этот код

NSArray *ary = [NSArray arrayWithObjects:@"E250", nil]; // String Data to find in String 
NSMutableArray *aryFoundData = [[NSMutableArray alloc]init]; 

for (int i=0; i<ary.count; i++) { 
    NSString *str = @"Your String E250"; 
    if ([str containsString:[ary objectAtIndex:i]]) { 
     [aryFoundData addObject:[ary objectAtIndex:i]]; 
    } 
} 

// Now aryFoundData contains all the data which are available in string 

Надежда это поможет вам.

+0

Спасибо! После тестирования оставляйте здесь комментарий. – vbondarenko3d

0

посмотрите на это:

NSString *testString = @"Sodium Nitrite E250 is a food additive that gives cured meats, such as ham E103, bacon, hot dogs, frankfurters, smoked fish E1255 corned beef, their characteristic red colour and flavour."; 

NSRegularExpression *regex = [[NSRegularExpression alloc] initWithPattern:@"E\\d+" options:0 error:nil]; 

[regex enumerateMatchesInString:testString options:0 range:NSMakeRange(0, testString.length) usingBlock:^(NSTextCheckingResult *result, NSMatchingFlags flags, BOOL *stop) { 
    NSLog(@"%@", [testString substringWithRange:result.range]); 
}]; 

он записывает следующее:

2015-05-05 15: 12: 55.898 Этикетка [3649: 339896] E250

2015-05-05 15: 12: 55.898 Этикетка [3649: 339896] E103

2015-05-05 15:12 : 55.898 Этикетка [3649: 339896] E1255

0

Пожалуйста, попробуйте ниже логика может быть вашей проблемой решить эту проблему.

NSMutableArray *ar = [NSMutableArray new]; 
NSString *str = @"Sodium Nitrite E250 is a food additive that gives cured meats, such as ham E103, bacon, hot dogs, frankfurters, smoked fish E1255 corned beef, their characteristic red colour and flavour."; 

NSArray * words = [str componentsSeparatedByCharactersInSet:[NSCharacterSet whitespaceCharacterSet]]; 
for (NSString * word in words) { 
    if ([word length] > 0) { 
     NSString * firstLetter = [word substringToIndex:1]; 
     if ([firstLetter isEqualToString:@"E"]) { 
      [ar addObject:word]; 
     } 
    } 
} 
NSLog(@"%@",ar); 
+0

Спасибо, но я думаю, что использование буквы «E» для ключа когда-нибудь даст ошибку при разборе, но я попробую – vbondarenko3d

0

Вы можете получить определенное ключевое слово из NSString и добавить их в NSMutableArray, выполнив следующие действия.

NSString* strText = @"Sodium Nitrite E250 is a food additive that gives cured meats, such as ham E103, bacon, hot dogs, frankfurters, smoked fish E1255 corned beef, their characteristic red colour and flavour."; 
    __block NSMutableArray* arrayStoreRange = [NSMutableArray new]; 

    //To Find Image from HTML string and add renge in NSMutableArray 
    //width 
    NSRegularExpression* tableRegex = [[NSRegularExpression alloc] initWithPattern:@"E\\w*\\d" options:0 error:NULL] ; 
    [tableRegex enumerateMatchesInString:strText options:0 range:NSMakeRange(0, [strText length]) usingBlock:^(NSTextCheckingResult *match, NSMatchingFlags flags, BOOL *stop){ 

     [arrayStoreRange addObject:[strText substringWithRange:match.range]]; 

    }]; 

    NSLog(@"Output : %@",arrayStoreRange); 

    for (NSString *str in arrayStoreRange){ 

     if ([yourArray containsObject:str]) { 
      // do something 
      NSLog(@"Object found"); 
     } 
     else{ 
      NSLog(@"Object not found"); 
     } 
    } 

Выход:

Output : (
    E250, 
    E103, 
    E1255 
) 

Надеется, что это поможет вам.

+1

Спасибо за помощь! Попытаюсь... – vbondarenko3d

Смежные вопросы