我想問一個關於目標C中的NSString *的問題嗎?我可以檢查NSString *對象的最後一個字符嗎?如何檢查NSString的最後一個字符
例子:
NSString* data = @"abcde,";
if(data is end with ',') // I don't know this part
// do sth
非常感謝你。
我想問一個關於目標C中的NSString *的問題嗎?我可以檢查NSString *對象的最後一個字符嗎?如何檢查NSString的最後一個字符
例子:
NSString* data = @"abcde,";
if(data is end with ',') // I don't know this part
// do sth
非常感謝你。
NSString *data = @"abcde,";
if([data hasSuffix:@","]) // This returns true in this example
// do something
的NSString Programming Guide建議:
如果你只是想確定一個字符串是否包含給定的模式,你可以使用一個謂語:
所以,在你的榜樣:
NSString *data = @"abcde,";
// Create the predicate
NSPredicate *myPredicate = [NSPredicate predicateWithFormat:@"SELF endswith %@", @","];
// Run the predicate
// match == YES if the predicate is successful
BOOL match = [myPredicate evaluateWithObject:data];
// Do what you want
if (match) {
// do something
}
有點囉嗦寫嗎?也許,但是如果你在多個地方做到這一點,它可以很容易地重構成一個輔助方法。
以下是NSPredicate docs的鏈接。
編輯
我已經做了一些分析,這是矯枉過正在這個簡單的情況下(見下文我的意見)。無論如何,我將把答案留在這裏,只是作爲使用謂詞來處理這類事情的一個例子。
哇!謂詞評估只是爲了檢查字符串的後綴?這有點矯枉過正。 – dreamlax 2010-07-14 14:02:29
爲什麼它是矯枉過正? '-hasSuffix:'只是一個設置NSString搜索的便捷方法。僅僅因爲它寫得更短,並不能提高效率。這也是來自文檔的建議(正如我鏈接到的),它還爲提問者提供了另一個測試他的代碼的方法,因爲'-hasSuffix:'方法不起作用,並且引入了一種新的方法來進行字符串搜索,提問者和其他人可能以前沒有考慮過。 – Abizern 2010-07-14 14:16:44
它是過度的,因爲您必須創建一個謂詞對象,該對象必須解析謂詞格式字符串,並且還必須使用目標對象評估謂詞對象。 'hasSuffix:'只需確保接收者的最後一個字符與參數相等。如果謂詞'endswith'在內部只使用'hasSuffix:',那就不會讓我感到驚訝。另外,在另一個答案中爲'hasSuffix:'提供的代碼有效。如果它不適用於OP,那麼他沒有給我們足夠的信息來正確回答他的問題。 – dreamlax 2010-07-14 14:21:08
如果您擔心性能,並且想要檢查一個字符,那麼使用-characterAtIndex:方法可能會更快。 -hasSuffix:接受一個字符串,因此可能需要做更多的工作,而不僅僅是檢查單個字符(儘管差異可能是微不足道的)。
您還可以使用類的方法添加到NSString的是這樣的:
@interface NSString(StringUtilities)
- (BOOL) endsWithCharacter: (unichar) c;
@end
@implementation NSString(StringUtilities)
- (BOOL) endsWithCharacter: (unichar) c
{
NSUInteger length = [self length];
return (length > 0) && ([self characterAtIndex: length - 1] == c);
}
@end
// test it...
NSString *data = @"abcd,";
if ([data endsWithCharacter: L','])
{
}
你就應該剖析,當然,可以肯定的。請記住,儘管通過將endsWithCharacter放入方法中,我們已經將消息傳遞給它,但這會歪曲分析結果,除非在分析替代方案時執行相同操作。
所有這些在大多數情況下可能是不成熟的優化 - 但是當然,如果你每秒鐘做數千次測試,這可能很重要(在這種情況下,你可能想直接在循環中使用代碼,因爲消息在嚴密的內部循環中傳遞並不是一個很好的計劃)。
' - [NSString characterAtIndex:]'返回一個'unichar',而不是'char'。 – 2010-07-16 11:40:46
好點喬納森 - 我已經更新了相應的例子... – 2010-07-16 16:50:11
robinjam,謝謝你的回覆。我嘗試了一下,但沒有奏效。這是另一種方法嗎? – Questions 2010-07-14 10:12:56
它適用於我...您必須在其他地方有一個錯誤。 – robinjam 2010-07-14 10:16:12
robinjam,謝謝你的回覆。我嘗試另一個NSString *,它也可以。我想這是我的程序的一些其他問題。因爲NSString *是從其他對象傳入的,所以我可以顯示NSString的最後一個字符,因爲我想確認最後一個字符。謝謝。 – Questions 2010-07-15 01:07:47