iOS 開發(fā)中實(shí)用小技巧(2)

NSCharacterSet的使用詳解

    [NSCharacterSet alphanumericCharacterSet];          //所有數(shù)字和字母(大小寫)
    [NSCharacterSet decimalDigitCharacterSet];          //0-9的數(shù)字
    [NSCharacterSet letterCharacterSet];                //所有字母
    [NSCharacterSet lowercaseLetterCharacterSet];       //小寫字母
    [NSCharacterSet uppercaseLetterCharacterSet];       //大寫字母
    [NSCharacterSet punctuationCharacterSet];           //標(biāo)點(diǎn)符號
    [NSCharacterSet whitespaceAndNewlineCharacterSet];  //空格和換行符
    [NSCharacterSet whitespaceCharacterSet];            //空格

NSCharacterSet中的常用方法或?qū)傩?/h2>

//指定字符集是包含于在于當(dāng)前字符集
- (BOOL)characterIsMember:(unichar)aCharacter;
//以二進(jìn)制格式編碼接收器的NSData對象,此格式適用于保存到文件或以其他方式傳輸或歸檔
@property (readonly, copy) NSData *bitmapRepresentation;
//反轉(zhuǎn)字符集,僅包含當(dāng)前字符集中不存在的字符
@property (readonly, copy) NSCharacterSet *invertedSet;

延伸

//返回一個指定字符集分隔開的子字符串?dāng)?shù)組
- (NSArray<NSString *> *)componentsSeparatedByCharactersInSet:(NSCharacterSet *)separator NS_AVAILABLE(10_5, 2_0);
//返回一個去除兩端指定字符集的字符串
- (NSString *)stringByTrimmingCharactersInSet:(NSCharacterSet *)set;
//返回指定字符集在當(dāng)前字符串中的第一個符合條件的范圍
- (NSRange)rangeOfCharacterFromSet:(NSCharacterSet *)searchSet;
//在數(shù)組中子串之間插入指定字符
- (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);

打印結(jié)果:
(
    "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.用指定字符串替代當(dāng)前字符中的指定字符集中的字符串

   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];  //字母數(shù)字反轉(zhuǎn)
    NSLog(@"%@",[[string componentsSeparatedByCharactersInSet:letter] componentsJoinedByString:@"_"]);


UITextField的字?jǐn)?shù)限制


-(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];
    
    // 沒有高亮選擇的字,則對已輸入的文字進(jìn)行字?jǐn)?shù)統(tǒng)計和限制
    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];
            }
        }
    }
}


?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容