查找两个逗号分隔的 NSMutableString 之间的差异

Find difference between two comma separated NSMutableString

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

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

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

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

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

如重复问题中所述,它是不同的。

将这两个字符串放在两个不同的 NSMutableSets 中,然后从第一个中减去第二个。 你会得到你的结果。

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]);

尝试使用 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);

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

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

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

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

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

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

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

[string componentsSeparatedByCharactersInSet: [NSCharacterSet characterSetWithCharactersInString:@",{"]] 这种方法的问题是,因为您的字符串 start/end 带有分隔符之一,您会得到 first/last 组件一个空字符串。您可以将它从数组中删除或忽略它或选择其他方法,您自己选择。

既然您知道了如何获取子字符串,您只需要知道如何比较两者。有很多方法可以做到这一点。我只想举几个例子。当然每个方案都有自己的优缺点和代码复杂度。

1 - 使用 isEqualToString:

逐个比较每个子字符串

2 - 使用 [string2 rangeOfString:substring].location != NSNotFound

将来自一个原始字符串的每个子字符串与完整的第二个原始字符串进行比较

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

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

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

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