NSCharacterSet的使用詳解
[NSCharacterSet alphanumericCharacterSet]; //所有數字和字母(大小寫)
[NSCharacterSet decimalDigitCharacterSet]; //0-9的數字
[NSCharacterSet letterCharacterSet]; //所有字母
[NSCharacterSet lowercaseLetterCharacterSet]; //小寫字母
[NSCharacterSet uppercaseLetterCharacterSet]; //大寫字母
[NSCharacterSet punctuationCharacterSet]; //標點符號
[NSCharacterSet whitespaceAndNewlineCharacterSet]; //空格和換行符
[NSCharacterSet whitespaceCharacterSet]; //空格
NSCharacterSet中的常用方法或屬性
//指定字符集是包含于在于當前字符集
- (BOOL)characterIsMember:(unichar)aCharacter;
//以二進制格式編碼接收器的NSData對象,此格式適用于保存到文件或以其他方式傳輸或歸檔
@property (readonly, copy) NSData *bitmapRepresentation;
//反轉字符集,僅包含當前字符集中不存在的字符
@property (readonly, copy) NSCharacterSet *invertedSet;
延伸
//返回一個指定字符集分隔開的子字符串數組
- (NSArray<NSString *> *)componentsSeparatedByCharactersInSet:(NSCharacterSet *)separator NS_AVAILABLE(10_5, 2_0);
//返回一個去除兩端指定字符集的字符串
- (NSString *)stringByTrimmingCharactersInSet:(NSCharacterSet *)set;
//返回指定字符集在當前字符串中的第一個符合條件的范圍
- (NSRange)rangeOfCharacterFromSet:(NSCharacterSet *)searchSet;
//在數組中子串之間插入指定字符
- (NSString *)componentsJoinedByString:(NSString *)separator;
舉例使用
1. NSString *testString = @"This is the test string for %a*b*c&";
NSArray *divArr = [testString componentsSeparatedByCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@"abc"]];
NSLog(@"%@",divArr);
打印結果:
(
"This is the test string for %",
"*",
"*",
"&"
)
2.去掉首尾空格
NSString *testString = @" This is the string contains whitespace in beginning and ending ";
NSString *whitesspaceStr = [testString stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
NSLog(@"%@",whitesspaceStr);
3.用指定字符串替代當前字符中的指定字符集中的字符串
NSMutableCharacterSet *letter = [NSMutableCharacterSet lowercaseLetterCharacterSet];
NSCharacterSet *decimalDigit = [NSCharacterSet decimalDigitCharacterSet];
[letter formUnionWithCharacterSet:decimalDigit];
NSString *string = @"g8!hgr3@09#23uiq%^78sjn453t78&13gesg*wt53(545y45)q3at";
NSLog(@"%@",[[string componentsSeparatedByCharactersInSet:letter] componentsJoinedByString:@"_"]);
[letter invert]; //字母數字反轉
NSLog(@"%@",[[string componentsSeparatedByCharactersInSet:letter] componentsJoinedByString:@"_"]);
UITextField的字數限制
-(void)textFieldEditChanged:(NSNotification *)obj{
UITextField *textField = (UITextField *)obj.object;
NSString *toBeString = textField.text;
//獲取高亮部分
UITextRange *selectedRange = [textField markedTextRange];
UITextPosition *position = [textField positionFromPosition:selectedRange.start offset:0];
// 沒有高亮選擇的字,則對已輸入的文字進行字數統計和限制
if (!position || !selectedRange)
{
if (toBeString.length > maxLength)
{
NSRange rangeIndex = [toBeString rangeOfComposedCharacterSequenceAtIndex:maxLength];
if (rangeIndex.length == 1)
{
textField.text = [toBeString substringToIndex:maxLength];
}
else
{
NSRange rangeRange = [toBeString rangeOfComposedCharacterSequencesForRange:NSMakeRange(0, maxLength)];
textField.text = [toBeString substringWithRange:rangeRange];
}
}
}
}