2015-05-05 22 views
-1

我有一個字符串,如:如何從NSString獲取特定的字符串?

亞硝酸鈉E250是一種食品添加劑,讓醃肉, 如火腿E103,臘肉,熱狗,法蘭克福香腸,薰魚 E1255醃牛肉,特有的紅色和香味。

我需要的元素的一個NSArray:E250E103E1255從上面的文字和我的預定義的NSArray(E100,E101,E1500 ...)比較元素 是否有任何如何做到這一點?

+1

你在尋找所有具有特定格式的字符串嗎?或者只是你說的三個? – milesper

+0

您可以看看正則表達式,它可以讓您檢索特定模式的數據,在您的示例中,它可以是字母E,後跟3個或更多數字。 – Greg

+0

如果您支持版本> = 8。0比你可以使用這個源代碼 - [字符串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 Label [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

相關問題