2012-03-15 48 views
2

我有以下NSString如何在此NSString中使用NSRange?

productID = @"com.sortitapps.themes.pink.book"; 

最後,「書」可以是任何東西......「音樂」,「電影」,「遊戲」等

我需要找到粉紅色之後的第三個時期,以便我可以用其他方式替換最後的「書」字。我如何用NSRange做到這一點?基本上,我需要這樣的:

partialID = @"com.sortitapps.themes.pink."; 

回答

7

您可以嘗試點向後搜索,並將結果以獲得所需的範圍:

NSString *str = @"com.sortitapps.themes.pink.book"; 
NSUInteger dot = [str rangeOfString:@"." options:NSBackwardsSearch].location; 

NSString *newStr = 
    [str stringByReplacingCharactersInRange:NSMakeRange(dot+1, [str length]-dot-1) 
           withString:@"something_else"]; 
2

好吧,雖然這不是尋找字符通用的解決方案,在您的特定情況下,你可以「欺騙」,並通過這樣做節省代碼:從本質上講

[productID stringByDeletingPathExtension]; 

,我將該名稱視爲文件名,並使用NSString方法刪除最後一個(也是最後一個)擴展名。

2

您可以使用-[NSString componentsSeparatedByString:@"."]拆分組件,使用所需的值創建一個新數組,然後使用[NSArray componentsJoinedByString:@"."]將修改後的數組再次加入到字符串中。

+0

雖然NSRange是正確的解決方案,這一點,我結束了使用您的解決方案,而不是因爲它更容易理解並操縱。這真的不應該使用的原因是因爲Apple/iOS不保證數組的順序是正確的(儘管它總是在實踐中)。 – 2012-03-15 19:55:37

+0

實際上,從[NSString類參考](https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSString_Class/Reference/NSString.html):_數組中的子串出現在他們在接收器中的順序._ – EmilioPelaez 2012-03-15 20:03:00

+0

是的,我的回答是生產這個問題的問題:) – Kekoa 2012-03-15 20:11:51

相關問題