找出两个逗号分隔的NSMutableString之间的区别

时间:2016-01-14 12:45:04

标签: ios objective-c nsstring nsarray nsmutablestring

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

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

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

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

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

正如重复提到的那样,它是不同的。

3 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

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

希望它会对你有所帮助。
感谢。

答案 2 :(得分:0)

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

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

[string substringFromIndex:index] - 从该索引获取NSString [string substringToIndex:index] - 从开始到该索引获取NSString 或者你可以把它结合起来 [string substringWithRange:NSMakeRange(fisrtIndex, secondIndex)] - 从第一个索引到第二个索引获取strin

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

[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,并且只有公共... < / p>

真的可能性几乎是无穷无尽的