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

xeufq47z  于 2023-05-08  发布在  iOS
关注(0)|答案(3)|浏览(152)

假设我有两个像这样的NSMutableString
String 1 ----- {aaa,bss,cdd,dff,eee,fgh}
String 2 ----- {aaa,bss,cdd}
我们如何在NSArray中找到String 1和String 2之间的差异:
像这样:- { dff,eee,fgh }
正如重复问题中提到的,这是不同的。

5sxhfpxr

5sxhfpxr1#

将这两个字符串放在两个不同的NSMutableSet中,然后从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]);
xmjla07d

xmjla07d2#

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

dgtucam13#

问题的第一部分是将每个字符串分隔成由逗号分隔的子字符串。
创建可使用的子字符串
[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约塞米蒂,你可以使用[string2 containsString:substring]
4 -你可以将子字符串的数组转换成集合,然后按照Ankit Srivastava的建议进行比较
5 -您可以使用removeObjectsInArray来获取两者之间不常见的子字符串,然后使用新创建的数组将removeObjectsInArray转换为原始字符串,并仅具有公共字符串。
真的,可能性几乎是无穷无尽的

相关问题