【问题标题】:Find difference between two comma separated NSMutableString查找两个逗号分隔的 NSMutableString 之间的区别
【发布时间】:2016-01-14 12:45:03
【问题描述】:

假设我有两个这样的NSMutableString:-

String 1 ----- {aaa,bss,cdd,dff,eee,fgh}

String 2 ----- {aaa,bss,cdd}

我们如何在NSArray 中找到String 1 和String 2 之间的区别:-

像这样:- { dff,eee,fgh }

正如在重复问题中提到的那样,它是不同的。

【问题讨论】:

  • 字符串是否包含{ 花括号?

标签: ios objective-c nsstring nsarray nsmutablestring


【解决方案1】:

将这两个字符串放在两个不同的 NSMutableSet 中,然后从 1 中减去 2。 你会得到你的结果。

NSString* str1 = @"aaa,bss,cdd,dff,eee,fgh";
NSString* str2 = @"aaa,bss,cdd";

NSMutableSet *set1 = [NSMutableSet setWithArray:[str1 componentsSeparatedByString:@","]];
NSMutableSet *set2 = [NSMutableSet setWithArray:[str2 componentsSeparatedByString:@","]];

[set1 minusSet:set2];

NSLog(@"result %@",[set1 allObjects]);

【讨论】:

    【解决方案2】:

    尝试使用NSMutableArray 删除相同的对象。

    例如。

    NSString *s1 = @"aaa,bss,cdd,dff,eee,fgh";
    NSString *s2 = @"aaa,bss,cdd";
    
    NSArray *arr1 = [s1 componentsSeparatedByString:@","];
    NSArray *arr2 = [s2 componentsSeparatedByString:@","];
    
    NSMutableArray *resArray = [NSMutableArray arrayWithArray:arr1];
    [resArray removeObjectsInArray:arr2];
    
    NSString *res = [resArray componentsJoinedByString:@","];
    NSLog(@"Result :: %@", res);
    

    希望对您有所帮助。
    谢谢。

    【讨论】:

      【解决方案3】:

      问题的第一部分是将每个字符串分成由逗号分隔的子字符串。

      要创建子字符串,您可以使用

      [string substringFromIndex:index] - 从该索引中获取 NSString [string substringToIndex:index] - 获取从开头到该索引的 NSString 或者你可以将它组合成 [string substringWithRange:NSMakeRange(fisrtIndex, secondIndex)] - 获取从第一个索引到第二个索引的字符串

      这些是基本操作。但在这种情况下,您可以专门使用更多内容:

      [string componentsSeparatedByString:@","] 获取包含所有子字符串的 NSArray。那将有'{''}' 出现在第一个和最后一个组件中的问题。这可以通过多种方式解决:

      • 首先使用已经解释过的子字符串方法修剪字符串
      • 完全使用另一种方法

      [string componentsSeparatedByCharactersInSet: [NSCharacterSet characterSetWithCharactersInString:@",{"]] 这个方法的问题是,因为你的字符串以一个分隔符开始/结束,你会得到第一个/最后一个组件一个空字符串。您可以将其从数组中删除或忽略它或选择其他方法,您的选择。

      现在您已经知道如何获取子字符串,您只需要知道如何比较两者即可。从字面上看,有很多方法可以做到这一点。我只是举几个例子。当然每种方案都有自己的优缺点和代码复杂度。

      1 - 使用isEqualToString:逐个比较每个子字符串

      2 - 使用[string2 rangeOfString:substring].location != NSNotFound比较原始字符串之一的每个子字符串与完整的第二个原始字符串

      3 - 如果你有 iOS 8 或 OS X Yosemite,你可以使用[string2 containsString:substring]

      4 - 您可以将子字符串数组转换为集合,然后按照 Ankit Srivastava 的建议进行比较

      5 - 您可以使用removeObjectsInArray 来获取两者之间不常见的子字符串,然后使用新创建的数组将removeObjectsInArray 用于原始数组,并且只有共同点...

      真正的可能性几乎是无限的

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-10-19
        • 2015-03-21
        • 1970-01-01
        • 2022-01-23
        • 2019-05-19
        • 1970-01-01
        • 2012-08-07
        相关资源
        最近更新 更多