我有一個字符串,如:如何從NSString獲取特定的字符串?
亞硝酸鈉E250是一種食品添加劑,讓醃肉, 如火腿E103,臘肉,熱狗,法蘭克福香腸,薰魚 E1255醃牛肉,特有的紅色和香味。
我需要的元素的一個NSArray:E250,E103,E1255從上面的文字和我的預定義的NSArray(E100,E101,E1500 ...)比較元素 是否有任何如何做到這一點?
我有一個字符串,如:如何從NSString獲取特定的字符串?
亞硝酸鈉E250是一種食品添加劑,讓醃肉, 如火腿E103,臘肉,熱狗,法蘭克福香腸,薰魚 E1255醃牛肉,特有的紅色和香味。
我需要的元素的一個NSArray:E250,E103,E1255從上面的文字和我的預定義的NSArray(E100,E101,E1500 ...)比較元素 是否有任何如何做到這一點?
正如你所說你想要與你現有的數組元素進行比較。所以,你可以做以下..
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);
}
}];
這個解決方案工程很棒。謝謝! – vbondarenko3d
歡迎您... –
而是提取,從文本字符串,我建議你從你的陣列發現的模板一樣的:
NSString *input = @"Sodium Nitrite E250 is a food additive ...";
for (NSString *str in @[ @"E100", @"E101", @"E1500" ])
if ([input rangeOfString:str].location != NSNotFound) {
// do something
}
如果你有大量的字符串比較,這是非常糟糕的表現。 –
謝謝,我會盡力的。字符串中有30-50個單詞。 – vbondarenko3d
@JakubVano在不知道完整任務的情況下很難推薦高性能解決方案。應用程序的完整體系結構可能不夠好,應該修改。但是這個代碼至少可以用於開箱即用 – Azat
嘗試使用此代碼
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
希望這會幫助你。
謝謝!測試後在這裏留言。 – vbondarenko3d
看看這樣:
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
請嘗試下面的邏輯可能是你的問題由此解決。
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);
謝謝,但我認爲使用「E」字母鍵有時會解析錯誤,但我會嘗試 – vbondarenko3d
您可以從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
)
希望這有助於你。
感謝您的幫助!會嘗試... – vbondarenko3d
你在尋找所有具有特定格式的字符串嗎?或者只是你說的三個? – milesper
您可以看看正則表達式,它可以讓您檢索特定模式的數據,在您的示例中,它可以是字母E,後跟3個或更多數字。 – Greg
如果您支持版本> = 8。0比你可以使用這個源代碼 - [字符串containsString:@「」] –