表达式包含XXXXXX.DATETIME 数组包含{DATE,DATETIME}
在循环中,检查表达式包含DATE。 事情都是真的。但我只想要DATE必须经历。
NSArray *array = [[NSArray alloc] initWithObjects: @"DATE", @"DATETIME", nil]];
for (int i=0; i<[array count]; i++) {
NSString *formatType = [array objectAtIndex:i];
if ([expression containsString:formatType]){
NSLog(@"%@", expression);
}
}
除了containsString还有其他选项吗?
答案 0 :(得分:0)
我不确定你在问什么,这是我的猜测:
array
),其中一些单词是其他人的前缀(例如DATE
是DATETIME
的前缀) 。这是一个动态数组,即你事先不知道这些单词是什么(否则你会在编译时修剪它)。expression
),其中可能包含您馆藏中的一个或多个字词。NSLog
表示),除非您的收藏集还包含另一个单词是单词的前缀,这意味着您的字符串还包含较短的单词,在这种情况下,您仅希望报告匹配更短字。如果您对问题的解读是正确的,那么预处理您的集合,使其不包含任何其他扩展名的单词是解决此问题的一种方法。在伪代码中,这将是:
array = original collection, say "ERA", "DATETIME", "DATE"
sortedArray = lexicographic sort of array, e.g. see NSArray's sortedArrayUsingComparator:
our sample would produce "DATE", "DATETIME", "ERA"
lastWord = first word of sortedArray
trimmedArray = new mutable array containing just lastWord
for each nextWord in sortedArray
if NOT lastWord is prefix of nextWord (see NSString's hasPrefix:)
add nextWord to trimmedArray
lastWord = nextWord
end if
end for
以上样本的最终结果是@[ "DATE", "ERA" ]
。将此结果用于原始代码而不是array
。
HTH