天道酬勤,学无止境

Remove all duplicate characters from NSString

How to do this using standard methods (without manual iteration through source string)?

PS: At final I want to get sorted characters of source string. I tried to use NSCharacterSet, but can't find a method to convert character set to string (without iterating the set).

评论

There is no built-in method for this, but it's pretty easy to iterate over the characters of the string and build a new string without duplicates:

NSString *input = @"addbcddaa";
NSMutableSet *seenCharacters = [NSMutableSet set];
NSMutableString *result = [NSMutableString string];
[input enumerateSubstringsInRange:NSMakeRange(0, input.length) options:NSStringEnumerationByComposedCharacterSequences usingBlock:^(NSString *substring, NSRange substringRange, NSRange enclosingRange, BOOL *stop) {
    if (![seenCharacters containsObject:substring]) {
        [seenCharacters addObject:substring];
        [result appendString:substring];
    }
}];
NSLog(@"String with duplicate characters removed: %@", result);
NSLog(@"Sorted characters in input: %@", [seenCharacters.allObjects sortedArrayUsingSelector:@selector(compare:)]);

This results in the string "adbc" (duplicates removed) and the sorted array of unique characters ["a", "b", "c", "d"].

受限制的 HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。

相关推荐
  • iphone sdk-从字符串中删除数字0-9以外的所有字符[重复](iphone sdk - Remove all characters except for numbers 0-9 from a string [duplicate])
    问题 这个问题已经在这里有了答案: 从NSString中删除数字以外的所有内容(22个答案) 6年前关闭。 好,这是计划。 我从中获取数据的XML允许电话号码字段中的非数字文本(用于描述或联系人姓名等)。 我试图仅提取数字并使用它们呼叫tel:URL以发起呼叫。 这是行不通的: NSCharacterSet *charset = [[NSCharacterSet decimalDigitCharacterSet] invertedSet]; NSString *number = @"(555) 555-5555 Office"; NSString *strippedNumber = [number stringByTrimmingCharactersInSet:charset]; NSString *phoneURL = [NSString stringWithFormat:@"tel:%@", strippedNumber]; [[UIApplication sharedApplication] openURL:[NSURL URLWithString:phoneURL]]; 如果有明显的错别字,那只是错别字。 :) 回答1 您正在使用修剪方法,这意味着它仅查看字符串的外边缘。 您可能会收到类似“ 555)555-555”的电话号码,对吗? 我不知道“
  • iphone sdk - Remove all characters except for numbers 0-9 from a string [duplicate]
    This question already has answers here: Remove all but numbers from NSString (22 answers) Closed 6 years ago. OK So here's the plan. The XML I'm getting data from allows non-numeric text in phone number fields (for descriptions or contact names, etc). I am trying to extract only the numbers and call the tel: URL with them to initiate a call. Here's whats NOT working: NSCharacterSet *charset = [[NSCharacterSet decimalDigitCharacterSet] invertedSet]; NSString *number = @"(555) 555-5555 Office"; NSString *strippedNumber = [number stringByTrimmingCharactersInSet:charset]; NSString *phoneURL =
  • 在Objective-C中将&转换为&(Converting & to & in Objective-C [duplicate])
    问题 这个问题已经在这里有了答案: Objective C HTML转义/转义(14个答案) 7年前关闭。 我有以下格式的URL字符串。 http://myserver.com/_layouts/feed.aspx?xsl=4&web=%2F&page=dda3fd10-c776-4d69-8c55-2f1c74b343e2&wp=476f174a-82df-4611-a3df-e13255d97533 我要替换& 在上述网址中使用& 。 我的结果应该是: http://myserver.com/_layouts/feed.aspx?xsl=4&web=%2F&page=dda3fd10-c776-4d69-8c55-2f1c74b343e2&wp=476f174a-82df-4611-a3df-e13255d97533 有人可以向我发布代码以完成此操作吗? 谢谢 回答1 [urlString stringByReplacingOccurrencesOfString:@"&" withString:@"&"]; 回答2 查看我的HTML的NSString类别。 以下是可用的方法: // Strips HTML tags & comments, removes extra whitespace and decodes HTML character entities. -
  • iOS 7联系人号码空格不是空格[重复](iOS 7 contact number spaces are not spaces [duplicate])
    问题 这个问题已经在这里有了答案: 删除从电话簿中提取的联系电话中的空格(2个答案) 4年前关闭。 在我的应用程序中,我试图检索联系人的号码列表,并尝试对其进行操作。 我意识到,无论何时添加新联系人(更新到iOS 7之后),新联系人的格式都已更改,因为新添加的数字中有空格。 使用普通的replace方法不会删除空格。 这些是真的空间还是什么? 我的目标是找回“空间”免费电话。 例如,如果数字为1 818 323 323 323 ,我想得到1818323323323 回答1 我认为这不是摆脱“空格”,而是仅保留小数字符。 这段代码为我做到了: phoneNumberString = [[phoneNumberString componentsSeparatedByCharactersInSet:[[NSCharacterSet decimalDigitCharacterSet] invertedSet]] componentsJoinedByString:@""]; 这会删除所有不是数字0-9的内容。 斯威夫特4.1: phoneNumberString = phoneNumberString.components(separatedBy: CharacterSet.decimalDigits.inverted).joined(separator: "") 回答2 试试这个:
  • NSString:删除前导0,以便'00001234'变为'1234'? [复制](NSString: remove leading 0s so '00001234' becomes '1234'? [duplicate])
    问题 这个问题已经在这里有了答案: 8年前关闭。 可能重复: 从字符串中删除前导零 我需要删除NSString中的前导0,我可以想到的一种快速方法是将字符串转换为NSNumber然后再转换回NSString ,这将给我干净的字符串,尽管我不确定它是否有效。 还有其他方法吗? 谢谢 回答1 因此,只是为了好玩,我决定定时执行此操作的各种方式。 这绝不是一项科学的测试,主要是出于娱乐目的,但还是有些人可能仍然希望看到它。 我创建了一个方法,并用各种例程替换了表示数字0-100,000的字符串,所有字符串均带有三个前导0。 但是请记住,如果只修剪其中一个(甚至一百个)字符串,即使是最慢的方法也完全可以接受。 (使用数字格式器大约需要.000012039905秒,即大约1/100毫秒。)其他一些事情(例如,代码的可读性和易读性)通常更为重要,除非您确实确实需要处理一个大的文件。这样的字符串。 我个人最喜欢的还是正则表达式,因为它是比较快的,马上很明显你正在试图完成的任务,即使没有文档。 结果如下(从最快到最慢): 遍历字符串 // I tried this by looping through the utf8String and got the same times // (actually, ever so slightly longer, probably since it had
  • 设置UITextField最大长度[重复](Set UITextField Maximum Length [duplicate])
    问题 这个问题已经在这里有了答案: 设置UITextField的最大字符长度(45个答案) 8年前关闭。 有什么办法可以设置UITextField的最大长度吗? 类似HTML输入字段中的MAXLENGTH属性。 回答1 这可以与退格键一起正常工作并复制并粘贴: #define MAXLENGTH 10 - (BOOL)textField:(UITextField *) textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string { NSUInteger oldLength = [textField.text length]; NSUInteger replacementLength = [string length]; NSUInteger rangeLength = range.length; NSUInteger newLength = oldLength - rangeLength + replacementLength; BOOL returnKey = [string rangeOfString: @"\n"].location != NSNotFound; return newLength <= MAXLENGTH || returnKey; }
  • how to remove characters from NSString after specific NSString
    I am having a string as follows NSString str1 = @"Hello your bal = 68094"; and I want to remove all characters after "=" symbol encounters in string. Can any one give me the solution for this?
  • UDID和UUID之间的区别(Differences between UDID and UUID [duplicate])
    问题 这个问题已经在这里有了答案: iPhone / iPad唯一标识符是否为UUID / UDID? (6个答案) 7年前关闭。 有人说UDID (Unique Device IDentifier)而有人说UUID (Universally Unique IDentifier) 。 他们是一样的吗? 它们之间有什么区别? 回答1 UUID(通用唯一IDentifier)基于每个应用程序。 识别设备上的应用。 只要用户没有完全删除应用程序,该标识符就会在应用程序启动之间持续存在,并且至少让您使用设备上的特定应用程序来识别同一用户。 不幸的是,如果用户完全删除然后重新安装该应用程序,则ID将更改。 UDID(唯一设备标识符)由40个十六进制字符组成的序列,用于唯一标识ios设备。 可以通过iTunes检索此值,也可以使用UIDevice -uniqueIdentifier找到该值。 从硬件详细信息(例如MAC地址)派生而来。 回答2 您最好阅读以下内容-http://nshipster.com/uuid-udid-unique-identifier/ UUID (通用唯一标识符):一组128位的比特,可以保证在空间和时间上的唯一性,由RFC 4122定义。 UDID (唯一设备标识符):由40个十六进制字符组成的序列,用于唯一标识iOS设备(如果需要,则为设备的社会安全号码)。
  • Remove characters in NSCharacterSet from NSString
    I have an NSCharacterSet which contains all the characters I want to remove from my NSString. How can I do that?
  • 如何从NSString中删除前3个字符?(How to remove first 3 characters from NSString?)
    问题 我有这样的字符串“ A. rahul VyAs” 我想删除“ A”和“ A”之后的空格。 这样新的字符串将是“ rahul VyAs” 我该如何实现? 回答1 您可以使用NSString实例方法substringWithRange:或substringFromIndex: NSString *str = @"A. rahul VyAs"; NSString *newStr = [str substringWithRange:NSMakeRange(3, [str length]-3)]; 或者 NSString *str = @"A. rahul VyAs"; NSString *newStr = [str substringFromIndex:3]; 回答2 试试这个, char *string=[@"A. rahul VyAs" cStringUsingEncoding:NSUTF8StringEncoding]; char *subString=&name[3]; NSString *newString=[NSString stringWithCString:subString encoding:NSUTF8StringEncoding]; 回答3 这是我专门看到的一种解决方案,用于删除规则出现的前缀并解决问题“我如何删除“ A””的答案。 NSString *
  • Strip out HTML Tags etc from NSString [duplicate]
    This question already has answers here: Closed 9 years ago. Possible Duplicate: Remove HTML Tags from an NSString on the iPhone I would like to know the best method for stripping out all HTML/Javascript etc tags out of an NSString. The current solution I am using leaves comments and other tags in, what would be the best way to remove them? I know OF solutions e.g. LibXML, but I would like some examples to work with. Current solution: - (NSString *)flattenHTML:(NSString *)html trimWhiteSpace:(BOOL)trim { NSScanner *theScanner; NSString *text = nil; theScanner = [NSScanner scannerWithString:html
  • 如何删除 NSMutableArray 中的重复值(how to remove duplicate value in NSMutableArray)
    问题 我正在使用 NSMutableArray 扫描 wifi 信息,但出现的重复值很少,所以我尝试使用以下代码但仍然获得重复值, if([scan_networks count] > 0) { NSArray *uniqueNetwork = [[NSMutableArray alloc] initWithArray:[[NSSet setWithArray:scan_networks] allObjects]]; [scan_networks removeAllObjects]; NSSortDescriptor *networkName = [[[NSSortDescriptor alloc] initWithKey:@"SSID_STR" ascending:YES] autorelease]; NSArray *descriptors = [NSArray arrayWithObjects:networkName,nil]; [scan_networks addObjectsFromArray:[uniqueNetwork sortedArrayUsingDescriptors:descriptors]]; } 这个怎么解决,谢谢 回答1 您可以使用 NSSET 但如果您仅在顺序无关紧要的情况下使用它,那么就采用这种方法。我已经使用过它,它给出了完美的答案。 在
  • 从更长的NSString返回一个单词包装的NSString [重复](Return a word-wrapped NSString from a longer NSString [duplicate])
    问题 这个问题已经在这里有了答案: 8年前关闭。 可能重复: UITextView:获取带有换行信息的文本 我一直在寻找NSString库和众多库来寻找一个可能会像这样的长字符串的函数: Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante. Donec eu libero sit amet quam egestas semper. Aenean ultricies mi vitae est. Mauris placerat eleifend leo. Quisque sit amet est et sapien ullamcorper pharetra. Vestibulum erat wisi, condimentum sed, commodo vitae, ornare sit amet, wisi. Aenean fermentum, elit eget tincidunt condimentum, eros ipsum rutrum orci, sagittis tempus lacus
  • 从 NSString 的第一行删除换行符(Remove newline character from first line of NSString)
    问题 如何从 NSString 中删除第一个\n字符? 编辑:只是为了澄清,我想做的是:如果字符串的第一行包含\ n字符,则将其删除,否则不执行任何操作。 即:如果字符串是这样的: @"\nhello, this is the first line\nthis is the second line" 并与第一行中不包含换行符的字符串相对: @"hello, this is the first line\nthis is the second line." 我希望这能让它更清楚。 回答1 这应该可以解决问题: NSString * ReplaceFirstNewLine(NSString * original) { NSMutableString * newString = [NSMutableString stringWithString:original]; NSRange foundRange = [original rangeOfString:@"\n"]; if (foundRange.location != NSNotFound) { [newString replaceCharactersInRange:foundRange withString:@""]; } return [[newString retain] autorelease]; } 回答2 [string
  • 如何使 NSString 路径(文件名)安全(How to make an NSString path (file name) safe)
    问题 我正在使用非常棘手的战斗方法 :) 来制作像File_Name这样的文件名安全的字符串 File Fi?le*/ Name 。 我确定有一种可可方法可以转换它。 我敢肯定,最好的提问地点就在这里:) 谢谢! 回答1 除非您显式运行 shell 或使用诸如popen或system类的函数隐式运行 shell,否则除了路径名分隔符之外没有理由转义任何内容。 您可能还想强制文件名不以句号开头(这会导致 Finder 隐藏文件),并且可能还应该强制它不为空且长度小于NAME_MAX字符*。 * syslimits.h表示字节,但如果你通过文件管理器,它是字符。 我不确定哪个适合可可。 回答2 这将根据 Ismail 的无效字符集删除文件名中任何位置的所有无效字符(我还没有验证他的设置有多完整)。 - (NSString *)_sanitizeFileNameString:(NSString *)fileName { NSCharacterSet* illegalFileNameCharacters = [NSCharacterSet characterSetWithCharactersInString:@"/\\?%*|\"<>"]; return [[fileName componentsSeparatedByCharactersInSet
  • Remove newline character from first line of NSString
    How can I remove the first \n character from an NSString? Edit: Just to clarify, what I would like to do is: If the first line of the string contains a \n character, delete it else do nothing. ie: If the string is like this: @"\nhello, this is the first line\nthis is the second line" and opposed to a string that does not contain a newline in the first line: @"hello, this is the first line\nthis is the second line." I hope that makes it more clear.
  • 将Unicode字符转换为NSString(Convert Unicode character to NSString)
    问题 我已经从Web服务接收到包含Unicode字符的字符串。 我想将其转换为普通的NSString。 所以我该怎么做? 例如:“这不是您的自行车” 因此,如何删除unicode并将其替换为具有相同功能的特殊符号。 输出为:“这不是您的自行车” 回答1 char cString[] = "This isn\u2019t your bike"; NSData *data = [NSData dataWithBytes:cString length:strlen(cString)]; NSString *string = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; NSLog(@"result string: %@", string); 这应该工作。 评论更新: 并非所有字体都支持您指定的unicode字符。 http://www.fileformat.info/info/unicode/char/92/fontsupport.htm 但是这个确实如此。 http://www.fileformat.info/info/unicode/char/2019/fontsupport.htm 这就是为什么它会引发错误。 回答2 NSString *final_url = [NSString
  • 从数组中删除重复项,比较其对象的属性(Remove duplicates from array comparing the properties of its objects)
    问题 假设我有一个类 Event,它有 2 个属性:action (NSString) 和 date (NSDate)。 假设我有一个 Event 对象数组。 问题是“日期”属性可以匹配。 我需要删除重复项,这意味着具有相同日期的 2 个不同对象是重复项。 我可以删除任何字符串数组或 nsdates 中的重复项,它们很容易比较。 但是如何处理复杂的对象,要比较它们的属性呢? 不要问我到目前为止我做了什么,因为我唯一想到的是冒泡排序,但它是一个新手解决方案,而且速度很慢。 非常感谢任何帮助(链接,tuts,代码)。 提前致谢。 编辑 感谢dasblinkenlight,我做了一个自定义方法: - (NSArray *)removeDuplicatesInArray:(NSArray*)arrayToFilter{ NSMutableSet *seenDates = [NSMutableSet set]; NSPredicate *dupDatesPred = [NSPredicate predicateWithBlock: ^BOOL(id obj, NSDictionary *bind) { YourClass *e = (YourClass*)obj; BOOL seen = [seenDates containsObject:e.propertyName]; if (!seen
  • 将数据附加到POST NSURLRequest(Append data to a POST NSURLRequest)
    问题 如何将数据附加到现有的POST NSURLRequest ? 我需要添加一个新参数userId=2323 。 回答1 如果您不希望使用第三方课程,则以下是设置帖子正文的方式... NSURL *aUrl = [NSURL URLWithString:@"http://www.apple.com/"]; NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:aUrl cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:60.0]; [request setHTTPMethod:@"POST"]; NSString *postString = @"company=Locassa&quality=AWESOME!"; [request setHTTPBody:[postString dataUsingEncoding:NSUTF8StringEncoding]]; NSURLConnection *connection= [[NSURLConnection alloc] initWithRequest:request delegate:self]; 只需将您的键/值对附加到发布字符串 回答2
  • 从字符串中删除最后一个字符。 斯威夫特语言(Remove last character from string. Swift language)
    问题 如何使用Swift从String变量中删除最后一个字符? 在文档中找不到它。 这是完整的示例: var expression = "45+22" expression = expression.substringToIndex(countElements(expression) - 1) 回答1 雨燕4.0(也是雨燕5.0) var str = "Hello, World" // "Hello, World" str.dropLast() // "Hello, Worl" (non-modifying) str // "Hello, World" String(str.dropLast()) // "Hello, Worl" str.remove(at: str.index(before: str.endIndex)) // "d" str // "Hello, Worl" (modifying) 斯威夫特3.0 这些API变得更加快捷,因此Foundation扩展有所改变: var name: String = "Dolphin" var truncated = name.substring(to: name.index(before: name.endIndex)) print(name) // "Dolphin" print(truncated) // "Dolphi"