containsString:问题

时间:2017-12-06 16:16:26

标签: objective-c nsstring

表达式包含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还有其他选项吗?

1 个答案:

答案 0 :(得分:0)

我不确定你在问什么,这是我的猜测:

  1. 您有一个包含多个单词的集合(array),其中一些单词是其他人的前缀(例如DATEDATETIME的前缀) 。这是一个动态数组,即你事先不知道这些单词是什么(否则你会在编译时修剪它)。
  2. 您有一个字符串(expression),其中可能包含您馆藏中的一个或多个字词。
  3. 对于您的收藏集中的每个字词,如果您的字符串包含该字词的一个或多个匹配项,那么您希望执行某些操作(在您的示例中由NSLog表示),除非您的收藏集还包含另一个单词是单词的前缀,这意味着您的字符串还包含较短的单词,在这种情况下,您希望报告匹配更短字。
  4. 如果您对问题的解读是正确的,那么预处理您的集合,使其不包含任何其他扩展名的单词是解决此问题的一种方法。在伪代码中,这将是:

    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