【问题标题】:How to remove common letters in two Strings in iOS SDK? [closed]如何在 iOS SDK 中删除两个字符串中的常用字母? [关闭]
【发布时间】:2013-07-02 09:23:21
【问题描述】:

如何删除两个字符串中的常用字母并使用剩余的唯一字母生成一个新字符串?

例如:

String 1= Optimus Prime,
String 2= Deja Thoras,

新字符串应该是:Djaha

【问题讨论】:

  • 你不是说“如何从一个字符串中删除另一个字符串中的字符吗?”
  • 对我来说好像是作业。应该这样标记。
  • 帕万,很多人回答后,你不能改变这个问题。最初的答案要求一个导致“Djaha”的过程。如果您有其他问题,请提出一个新问题。
  • @futureelite7 不,不应该。作业标签早就被删除了。在 Meta 上的某个地方阅读所有相关信息。
  • 我已经恢复了这个问题的最后一次编辑,否则没有人会理解答案。

标签: iphone ios objective-c nsstring


【解决方案1】:

只需枚举字符串中的字符并删除匹配范围。一定要搜索“无大小写”(即大小写字母之间的区别无关紧要)。以下 sn-p 记录“Djaha”,正如开篇所期望的那样。

NSString *firstString = @"Deja Thoras";
NSString *secondString = @"Optimus Prime";

NSMutableString *outputString = [NSMutableString stringWithString:firstString];

[outputString enumerateSubstringsInRange:NSMakeRange(0, firstString.length) options:NSStringEnumerationByComposedCharacterSequences 
usingBlock:^(NSString *substring, NSRange substringRange, NSRange enclosingRange, BOOL *stop) {
    if ([secondString rangeOfString:substring options:NSCaseInsensitiveSearch].location != NSNotFound) {
        [outputString deleteCharactersInRange:substringRange];
    }
}];

NSLog(@"%@", outputString);

如果这是一个常见的操作,我会将代码放入一个类别中,方法名称类似于stringByRemovingMatchingCharactersInString:

【讨论】:

  • +1 用于使用enumerateSubstringsInRange: 枚举字符。
  • 如果它对您有用,请标记为已回答,所以这个问题可以被视为已关闭。
  • 这不是我的问题@BenjaminMayo 哈哈哈
  • 是的,enumerateSubstringsInRange: 比执行 for 循环迭代要好得多,因为它不仅具有更多的语义意义,而且它默默地为您处理不同的语言环境和语言。
  • @BenjaminMayo:谢谢兄弟。但为了更清楚,我更正了这个问题。你介意再看一次吗
【解决方案2】:

这是一种避免字符枚举细节的方法:

NSString *string1 = @"Deja Thoras";
NSString *string2 = @"Optimus Prime";

NSCharacterSet *filterSet = [NSCharacterSet characterSetWithCharactersInString:string2];
NSString *filteredString = [[string1 componentsSeparatedByCharactersInSet:filterSet] componentsJoinedByString:@""];

【讨论】:

  • 运行它得到的输出是“OptimuPim”,所以它不能正常工作。我认为您没有添加第二个字符串中的字母(以及减少重复项)。
  • @borrrden 我正在做的是从另一个字符串中删除字符串中包含的字符。由于“Djaha”的预期结果,我认为 OP 想要这个而不是你所描述的。此外,我专注于字符删除并忽略了区分大小写。
  • 我现在明白了。如果你颠倒两个字符串并区分大小写,那么它就可以工作。聪明!
  • @NikolaiRuhe:感谢您的帮助。为了更清楚,我在这里编辑了问题,如何删除两个字符串组合中的重复字母并使用剩余的唯一字母生成一个新字符串?例如:字符串 1= optimusprime,字符串 2= dejathoras,组合字符串:optimusprimedejathoras 现在通过删除重复的字母,新字符串应该是:optimusredjah,问题是,新字符串中应该只有一种类型的字母,而不是重复的(如您在示例中所见)
  • @PawanJoshi 正如其他人所说,您不能以使答案无效的方式使用现有答案编辑问题。相反,您应该使用已更改的问题发布新帖子。话虽如此,您应该首先真正考虑这个问题,以及规范是否有意义。例如,以您现在提出问题的方式,不清楚为什么有两个字符串。如果在删除重复字符之前将字符串连接起来,则无需添加具有两个参数的复杂性。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-22
  • 2021-07-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多