【问题标题】:containsString: issue包含字符串:问题
【发布时间】:2017-12-06 16:16:25
【问题描述】:

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

【问题讨论】:

  • isEqualToString: ?

标签: objective-c nsstring


【解决方案1】:

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

  1. 您有一个集合 (array),其中包含许多单词,其中一些是其他单词的 前缀(例如,DATEDATETIME 的前缀)。这是一个 动态 数组,也就是说,您事先不知道单词是什么(否则您会在编译时对其进行修剪)。
  2. 您有一个字符串 (expression),其中可能包含您的收藏中的一个或多个单词。
  3. 对于集合中的每个单词,如果您的字符串包含一个或多个该单词,那么您希望做某事(在您的示例中由 NSLog 表示)除非您的集合还包含另一个单词这是单词的前缀,这意味着您的字符串还包含 shorter 单词,在这种情况下,您希望报告 shorter 的匹配项em> 单词。

如果您对问题的阅读是正确的,那么预处理您的集合,使其不包含任何其他词的扩展是解决此问题的一种方法。在伪代码中,这将是:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-12-20
    • 1970-01-01
    • 2021-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-02
    相关资源
    最近更新 更多