回答
選項1:
NSString *haystack = @"value:hello World:value";
NSString *haystackPrefix = @"value:";
NSString *haystackSuffix = @":value";
NSRange needleRange = NSMakeRange(haystackPrefix.length,
haystack.length - haystackPrefix.length - haystackSuffix.length);
NSString *needle = [haystack substringWithRange:needleRange];
NSLog(@"needle: %@", needle); // -> "hello World"
選項2:
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"^value:(.+?):value$" options:0 error:nil];
NSTextCheckingResult *match = [regex firstMatchInString:haystack options:NSAnchoredSearch range:NSMakeRange(0, haystack.length)];
NSRange needleRange = [match rangeAtIndex: 1];
NSString *needle = [haystack substringWithRange:needleRange];
這一條可能有點過頂你相當瑣碎的情況下,雖然。
選項3:
NSString *needle = [haystack componentsSeparatedByString:@":"][1];
這一個創建三個臨時字符串和而分裂的陣列。
所有代碼段都假定搜索到的內容實際上包含在字符串中。
它在NSAnchoredSearch上哭了...也許NSMatchingAnchored更好。 – Jonny 2017-01-05 09:52:11
這裏有一個稍微不那麼複雜的答案:
NSString *myString = @"abcdefg";
NSString *mySmallerString = [myString substringToIndex:4];
參見substringWithRange和substringFromIndex
對不起,這不回答這個問題(如何從字符串中獲取子字符串)。 – Monolo 2013-04-27 15:42:45
這裏有一個簡單的功能,可以讓你做你在找什麼:
- (NSString *)getSubstring:(NSString *)value betweenString:(NSString *)separator
{
NSRange firstInstance = [value rangeOfString:separator];
NSRange secondInstance = [[value substringFromIndex:firstInstance.location + firstInstance.length] rangeOfString:separator];
NSRange finalRange = NSMakeRange(firstInstance.location + separator.length, secondInstance.location);
return [value substringWithRange:finalRange];
}
用法:
NSString *myName = [self getSubstring:@"This is my :name:, woo!!" betweenString:@":"];
如果照亮的話,我可以告訴你我投其他答案的理由。我寧願寫兩行代碼,而不是六行。 – 2013-11-15 17:01:05
問題是,這兩行代碼只能解決任何人都不會存在的特定情況 - 甚至可能對於提問者也不存在。 – Garett 2013-11-19 22:39:52
'getSubstring:...'應該被稱爲'substringInString:...',因爲你沒有向它傳遞一個子字符串,而且以'get ...'開頭的方法通常需要傳遞一個緩衝區指針來寫入。 'substringFromIndex:'創建一箇中間子字符串,這是不必要的,這就是'rangeOfString:options:range:'的用途。最後,通過將不安全的代碼片段包裝在一個所謂的泛型方法中,您可以屏蔽一個錯誤:如果分隔符在字符串中存在一次或更少次,則會出現超出範圍的異常。 – Regexident 2014-05-07 15:57:00
這裏有@Regexident Option 1和@Garett答案的一個小組合,在前綴和後綴之間得到一個強大的字符串切割器,其上有MORE ... ANDMORE字樣。
NSString *haystack = @"MOREvalue:hello World:valueANDMORE";
NSString *prefix = @"value:";
NSString *suffix = @":value";
NSRange prefixRange = [haystack rangeOfString:prefix];
NSRange suffixRange = [[haystack substringFromIndex:prefixRange.location+prefixRange.length] rangeOfString:suffix];
NSRange needleRange = NSMakeRange(prefixRange.location+prefix.length, suffixRange.location);
NSString *needle = [haystack substringWithRange:needleRange];
NSLog(@"needle: %@", needle);
使用,這也
NSString *ChkStr = [MyString substringWithRange:NSMakeRange(5, 26)];
注 - NSMakeRange(start, end)
應該是NSMakeRange(start, end- start)
;
- 1. 如何遍歷NSString並獲取子字符串?
- 2. NSString子串後的子串
- 3. 如何從NSString獲取int?
- 4. 如何從NSString獲取CGFloat?
- 5. NSString子串
- 6. 從NSString中提取線程的子串
- 7. 從NSString獲取特定的字符串
- 8. 如何從NSString獲取特定的字符串?
- 9. 如何從NSString獲取特定的字符串?
- 10. 從NSString提取子字符串
- 11. NSString提取模式子字符串
- 12. NSString子串檢測
- 13. 如何獲取NSString的字符?
- 14. 如何獲取NSString的NSArray鍵值?
- 15. 如何從ios中獲取Nsstring的值?
- 16. 如何獲取Android中的子串?
- 17. 如何獲取LPCTSTR的子字符串?
- 18. 從NSString獲取普通字符作爲子串
- 19. 從NSString獲取子字符串直到到達特定單詞
- 20. 如何獲取兩個子串之間的子串?
- 21. 如何在iPhone的NSString中獲取並獲取URL?
- 22. 如何從NSString獲取每一行?
- 23. 如何通過NSString獲取類對象
- 24. 如何獲取 - [NSString sizeWithFont:forWidth:lineBreakMode:]工作?
- 25. xcode如何從NSURL獲取NSString
- 26. 如何獲取所有屬性 - [NSString sizeWithAttributes:]
- 27. 如何從塊中獲取NSString?
- 28. 如何從NSInvocation獲取NSString結果?
- 29. 如何獲取子字符串
- 30. django:如何獲取子字符串?
可能重複[在NSstring中搜索](http://stackoverflow.com/questions/3771211/search-within-nsstring)或[使用正則表達式搜索NSString。](http://stackoverflow.com/questions/ 4353834 /搜索通過nsstring使用正則表達式) – 2011-04-15 11:48:33
我投票結束這個問題不清楚你問什麼。根本沒有任何跡象顯示這裏到底需要什麼。你想只返回'「你好世界」'? 'return @「hello World」'。你想回歸冒號之間的內容嗎?你想剝離最左邊結腸的所有東西,以及右邊結腸的所有東西嗎?對於這個問題沒有明確定義的投入產出標準(正如我們所看到的問題清單,所有問題都可以通過各種方法解決問題)。 – nhgrif 2015-08-25 12:55:05