9

所以当我理解字符串方法时,我遇到了这个有用的类 NSCharacterSet

在这篇文章中定义的非常类似于字符串 excpet,它用于将 char 保存在无序集中

NSString 和 NSCharacterset 有什么区别?

所以后来我遇到了有用的方法 reverseSet,它有点不太清楚到底发生了什么。我还阅读了一页后的页面,它们都掩盖了正在发生的事情的基础知识,并跳入了高级解释。因此,如果您想知道这是什么以及我们为什么使用它简单地说,这并不容易,相反,您可以从苹果文档中获得这样的陈述:“一个字符集只包含接收器中不存在的字符。” - 我该如何准确地使用它???

所以这就是我理解的用途。如果我解释不正确,请简单地提供。

使用示例:

在要限制要包含的字符串的 NSCharacterSet 中创建字符列表。

NSString *validNumberChars      = @"0123456789"; //Only these are valid.

//Now assign to a NSCharacter object to use for searching and comparing later
validCharSet = [NSCharacterSet characterSetWithCharactersInString:validNumberChars ];

//Now create an inverteds set OF the validCharSet. 
NSCharacterSet *invertedValidCharSet = [validCharSet invertedSet];

//Now scrub your input string of bad character, those characters not in the validCharSet

NSString *scrubbedString = [inputString stringByTrimmingCharactersInSet:invertedValidCharSet];

//By passing in the inverted invertedValidCharSet as the characters to trim out, then you are left with only characters that are in the original set. captured here in scrubbedString.

那么这是如何正确使用此功能,还是我错过了什么?

谢谢

史蒂夫

4

2 回答 2

9

字符集就是一个字符集。当你反转一个字符集时,你会得到一个新的字符集,其中包含原始字符集之外的所有字符。

在您的示例中,您从包含 10 个标准数字的字符集开始。当您反转集合时,您会得到一个包含除 10 位数字之外的所有字符的集合。

于 2013-07-13T16:10:29.730 回答
5
validCharSet = [NSCharacterSet characterSetWithCharactersInString:validNumberChars];

这将创建一个包含 10 个字符0, 1, ...,的字符集9

invertedValidCharSet = [validCharSet invertedSet];

这将创建反转字符集,即所有 Unicode 字符集, 包括上面的 10 个字符。

scrubbedString = [inputString stringByTrimmingCharactersInSet:invertedValidCharSet];

. _ _ _ 例如,如果inputStringinvertedValidCharSet

inputString = @"abc123d€f567ghj"

然后

scrubbedString = @"123d€f567"

正如您可能期望的那样,Is 不会给定集中删除所有字符。

实现这一目标的一种方法是(从NSString 复制 - 从 NSCharacterSet 替换字符):

scrubbedString = [[inputString componentsSeparatedByCharactersInSet:invertedValidCharSet] componentsJoinedByString:@""]

这可能不是最有效的方法,但由于您的问题是关于理解 NSCharacterSet,我希望它有所帮助。

于 2013-07-13T16:09:58.707 回答