我需要檢查我的數組中的字符串是否爲空使用NSComparisonPredicate。正在執行的謂詞是:string MATCHES [c]「」 但結果中沒有顯示,它沒有列出我的空字符串。 我的謂詞是錯誤的還是隻有另一種用NSPredicate處理空字符串的方法?NSComparisonPredicate找到空字符串
回答
由於rdelmar上面提到的,對於這樣的任務,你應該只是string.length==0
檢查字符串的長度,你可以使用塊篩選陣列。我會建議使用NSPredicate的方法。下面是一些示例代碼:
//creating array
NSArray *myArray = [NSArray arrayWithObjects:@"a", @"b", @"", @"c", nil];
//filtering
NSIndexSet *iset = [myArray indexesOfObjectsPassingTest:^BOOL(id obj, NSUInteger idx, BOOL *stop) {
NSString *str = obj;
return !str.length;
}
];
//creating my result array with empty strings
NSArray *emptyStrings = [myArray objectsAtIndexes:iset];
//logging all strings
for (NSString *str in myArray) {
NSLog(@"string: %@", str);
}
//logging empty strings
for (NSString *str in emptyStrings) {
NSLog(@"empty string: %@", str);
}
編輯: 如果你確實需要使用NSComparisonPredicate,那就是:
NSExpression *left = [NSExpression expressionForKeyPath:@"length"];
NSExpression *right = [NSExpression expressionForConstantValue:[NSNumber numberWithInt:0]];
NSComparisonPredicateModifier modifier = NSDirectPredicateModifier;
NSPredicateOperatorType operator = NSEqualToPredicateOperatorType;
NSPredicate *predicate = [NSComparisonPredicate predicateWithLeftExpression:left rightExpression:right modifier:modifier type:operator options:0];
NSArray *filtered = [myArray filteredArrayUsingPredicate:predicate];
問題是我必須爲此使用NSPredicate。這是我試着用你建議的長度:predicate = [NSComparisonPredicate predicateWithLeftExpression:[NSExpression expressionForConstantValue:[NSNumber numberWithInt:string.length]]但它只是返回我的數組中的所有字符串。 – icocoa
@icocoa檢查我編輯的答案。 – Adam
感謝亞當,這將工作,但我只是意識到,實際的問題是。謂詞= [NSComparisonPredicate predicateWithLeftExpression:[NSExpression expressionForConstantValue:[NSNumber的numberWithInt:expressionKeyPath.length]] rightExpression:[NSExpression expressionForConstantValue:[NSNumber的numberWithInt:0]] 改性劑:NSDirectPredicateModifier 類型:NSEqualToPredicateOperatorType選項:選項];表達式關鍵路徑是核心數據屬性,而不是實際的字符串,其長度我想比較但是它的值。對此有任何想法? – icocoa
我不知道爲什麼你使用NSComparisonPredicate,我我從來沒有使用過那個,所以我不熟悉它。你有沒有嘗試過predicateWithFormat?
NSPredicate *pred = [NSPredicate predicateWithFormat:@"self.length == 0"];
不清楚你想如何使用謂詞,但是如果你使用它來過濾一個數組,它應該可以工作。
如果你想知道你的數組中的空字符串的索引,那麼你可以使用indexesOfObjectsPassingTest:像這樣:
NSIndexSet *indxs = [array indexesOfObjectsPassingTest:^BOOL(NSString *aString, NSUInteger idx, BOOL *stop) {
return aString.length == 0;
}];
NSLog(@"%@",indxs);
- 1. indexOf找到空字符串
- 2. 找到的空格數的字符串
- 3. SQL找不到空字符串
- 4. 字符串 - 查找空值
- 5. 找到字符串
- 6. 找到字符串
- 7. 找到字符串
- 8. 找不到字符串中的'空格'字符
- 9. 從斜槓查找字符串到空格或字符
- 10. 查找字符串,並得到一切從字符串到下一個空間
- 11. Xpages空字符串或空字符串
- 12. 在嵌套數據(Java)中找到空值和空字符串
- 13. 找到字符串中的@字符
- 14. jQuery的,字符串,找到
- 15. 找到並從字符串
- 16. 找到文本字符串
- 17. 如何找到字符串
- 18. 如何找到字符串
- 19. 如何找到字符串
- 20. VBA找到字符串
- 21. C#找到最字符串
- 22. Z3字符串:找到API
- 23. 內找到長字符串
- 24. 的Unix找到字符串
- 25. 找到字符串蟒蛇
- 26. combobox.FindStringExact找不到字符串
- 27. 找到字符串索引
- 28. 如何在Python中的字符串中找到空字節?
- 29. 查找字符串中的空格
- 30. 查找子字符串忽略空格
你試過string.length減== 0? – rdelmar
我曾嘗試使用此謂詞比較長度:謂詞= [NSComparisonPredicate predicateWithLeftExpression:[NSExpression expressionForConstantValue:[NSNumber numberWithInt:string.length]] – icocoa
而且,這是否有效? – rdelmar