NSString_category 字符串类目

本文介绍了一个NSString类别扩展,提供了多种字符串处理方法,如去除空白字符、计数单词数量、替换字符等,并详细展示了每个方法的实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文来源:借鉴github代码以及他人代码,非网上直接复制粘贴,仅供参考。
                            首先介绍一下whitespaceAndNewlineCharacterSetwhitespaceCharacterSet的区别。
            
            输出结果如下图所示:
           

(1)NSString+PJR.h

//  Lib

//

//  Created by Paritosh on 15/05/14.

//

//

/* All rights reserved.

*

* Redistribution and use in source and binary forms, with or without

* modification, are permitted provided that the following conditions are met:

*     * Redistributions of source code must retain the above copyright

*       notice, this list of conditions and the following disclaimer.

*     * Redistributions in binary form must reproduce the above copyright

*       notice, this list of conditions and the following disclaimer in the

*       documentation and/or other materials provided with the distribution.

*     * Neither the name of the <organization> nor the

*       names of its contributors may be used to endorse or promote products

*       derived from this software without specific prior written permission.

*

* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND

* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED

* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE

* DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY

* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES

* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;

   * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND

* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT

* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS

* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

*

*/


#import <Foundation/Foundation.h>

#import <CoreGraphics/CoreGraphics.h>

#import <UIKit/UIKit.h>


#import "CommonVariables.h"


@interface NSString (PJR)


-(BOOL)isBlank;

-(BOOL)isValid;

- (NSString *)removeWhiteSpacesFromString;


- (NSUInteger)countNumberOfWords;

- (BOOL)containsString:(NSString *)subString;

- (BOOL)isBeginsWith:(NSString *)string;

- (BOOL)isEndssWith:(NSString *)string;


- (NSString *)replaceCharacter:(NSString *)olderChar withCharcter:(NSString *)newerChar;

- (NSString*)getSubstringFrom:(NSInteger)begin to:(NSInteger)end;

- (NSString *)addString:(NSString *)string;

- (NSString *)removeSubString:(NSString *)subString;


- (BOOL)containsOnlyLetters;

- (BOOL)containsOnlyNumbers;

- (BOOL)containsOnlyNumbersAndLetters;

- (BOOL)isInThisarray:(NSArray*)array;


+ (NSString *)getStringFromArray:(NSArray *)array;

- (NSArray *)getArray;


+ (NSString *)getMyApplicationVersion;

+ (NSString *)getMyApplicationName;


- (NSData *)convertToData;

+ (NSString *)getStringFromData:(NSData *)data;


- (BOOL)isValidEmail;

- (BOOL)isValidAmericanPhoneNumber;

- (BOOL)isValidUrl;


- (BOOL)isValidChinesePhoneNumber;

- (NSString *) reverseString;


// modify frame height according to font size.

- (CGFloat)frameHeighWithFontSize:(CGFloat)fontSize viewWidth:(CGFloat)width;

@end


 

(2)NSString+PJR.m

//  Lib

//

//  Created by Paritosh on 15/05/14.

//

// * All rights reserved.

/*

* Redistribution and use in source and binary forms, with or without

* modification, are permitted provided that the following conditions are met:

*     * Redistributions of source code must retain the above copyright

*       notice, this list of conditions and the following disclaimer.

*     * Redistributions in binary form must reproduce the above copyright

*       notice, this list of conditions and the following disclaimer in the

*       documentation and/or other materials provided with the distribution.

*     * Neither the name of the <organization> nor the

*       names of its contributors may be used to endorse or promote products

*       derived from this software without specific prior written permission.

*

* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND

* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED

* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE

* DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY

* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES

* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;

   * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND

* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT

* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS

* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

*

*/


#import "NSString+PJR.h"

@implementation NSString (PJR)

// Checking if String is Empty

-(BOOL)isBlank

{

    return ([[selfremoveWhiteSpacesFromString]isEqualToString:@""]) ?YES :NO;

}

//Checking if String is empty or nil

-(BOOL)isValid

{

    return ([[selfremoveWhiteSpacesFromString]isEqualToString:@""] ||self ==nil || [selfisEqualToString:@"(null)"]) ?NO :YES;

}


// remove white spaces from String

- (NSString *)removeWhiteSpacesFromString

{

NSString *trimmedString = [selfstringByTrimmingCharactersInSet:

  [NSCharacterSetwhitespaceAndNewlineCharacterSet]];

return trimmedString;

}


// Counts number of Words in String

- (NSUInteger)countNumberOfWords

{

    NSScanner *scanner = [NSScannerscannerWithString:self];

    NSCharacterSet *whiteSpace = [NSCharacterSetwhitespaceAndNewlineCharacterSet];

   NSUInteger count = 0;

   while ([scannerscanUpToCharactersFromSet: whiteSpace intoString:nil]) {

        count++;

    }

   return count;

}


// If string contains substring

- (BOOL)containsString:(NSString *)subString

{

   return ([selfrangeOfString:subString].location ==NSNotFound) ? NO :YES;

}


// If my string starts with given string

- (BOOL)isBeginsWith:(NSString *)string

{

   return ([selfhasPrefix:string]) ?YES : NO;

}


// If my string ends with given string

- (BOOL)isEndssWith:(NSString *)string

{

   return ([selfhasSuffix:string]) ?YES : NO;

}


// Replace particular characters in my string with new character

- (NSString *)replaceCharacter:(NSString *)olderChar withCharcter:(NSString *)newerChar

{

    return  [selfstringByReplacingOccurrencesOfString:olderCharwithString:newerChar];

}


// Get Substring from particular location to given lenght

- (NSString*)getSubstringFrom:(NSInteger)begin to:(NSInteger)end

{

NSRange r;

r.location = begin;

r.length = end - begin;

return [selfsubstringWithRange:r];

}


// Add substring to main String 

- (NSString *)addString:(NSString *)string

{

   if(!string || string.length == 0)

       returnself;


    return [selfstringByAppendingString:string];

}


// Remove particular sub string from main string

-(NSString *)removeSubString:(NSString *)subString

{

   if ([selfcontainsString:subString])

    {

       NSRange range = [selfrangeOfString:subString];

        return  [selfstringByReplacingCharactersInRange:rangewithString:@""];

    }

    return self;

}


// If my string contains ony letters

- (BOOL)containsOnlyLetters

{

    NSCharacterSet *letterCharacterset = [[NSCharacterSetletterCharacterSet]invertedSet];

    return ([selfrangeOfCharacterFromSet:letterCharacterset].location ==NSNotFound);

}


// If my string contains only numbers

- (BOOL)containsOnlyNumbers

{

    NSCharacterSet *numbersCharacterSet = [[NSCharacterSetcharacterSetWithCharactersInString:@"0123456789"]invertedSet];

    return ([selfrangeOfCharacterFromSet:numbersCharacterSet].location ==NSNotFound);

}


// If my string contains letters and numbers

- (BOOL)containsOnlyNumbersAndLetters

{

    NSCharacterSet *numAndLetterCharSet = [[NSCharacterSetalphanumericCharacterSet]invertedSet];

    return ([selfrangeOfCharacterFromSet:numAndLetterCharSet].location ==NSNotFound);

}


// If my string is available in particular array

- (BOOL)isInThisarray:(NSArray*)array

{

   for(NSString *stringin array) {

       if([selfisEqualToString:string]) {

           returnYES;

        }

    }

    return NO;

}


// Get String from array

+ (NSString *)getStringFromArray:(NSArray *)array

{

    return [arraycomponentsJoinedByString:@" "];

}


// Convert Array from my String

- (NSArray *)getArray

{

    return [selfcomponentsSeparatedByString:@" "];

}


// Get My Application Version number

+ (NSString *)getMyApplicationVersion

{

NSDictionary *info = [[NSBundlemainBundle]infoDictionary];

NSString *version = [infoobjectForKey:@"CFBundleVersion"];

return version;

}


// Get My Application name

+ (NSString *)getMyApplicationName

{

NSDictionary *info = [[NSBundlemainBundle]infoDictionary];

NSString *name = [infoobjectForKey:@"CFBundleDisplayName"];

return name;

}



// Convert string to NSData

- (NSData *)convertToData

{

    return [selfdataUsingEncoding:NSUTF8StringEncoding];

}


// Get String from NSData

+ (NSString *)getStringFromData:(NSData *)data

{

    return [[NSStringalloc]initWithData:data

                                encoding:NSUTF8StringEncoding];

    

}


// Is Valid Email


- (BOOL)isValidEmail

{

    NSString *regex =@"[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,4}";

    NSPredicate *emailTestPredicate = [NSPredicatepredicateWithFormat:@"SELF MATCHES %@", regex];

   return [emailTestPredicateevaluateWithObject:self];

}


// Is Valid Phone


- (BOOL)isValidAmericanPhoneNumber

{

    NSString *regex =@"[235689][0-9]{6}([0-9]{3})?";

    NSPredicate *test = [NSPredicatepredicateWithFormat:@"SELF MATCHES %@", regex];

    return [testevaluateWithObject:self];

}


// Is Valid URL


- (BOOL)isValidUrl

{

    NSString *regex =@"(http|https)://((\\w)*|([0-9]*)|([-|_])*)+([\\.|/]((\\w)*|([0-9]*)|([-|_])*))+";

    NSPredicate *urlTest = [NSPredicatepredicateWithFormat:@"SELF MATCHES %@",regex];

    return [urlTestevaluateWithObject:self];

}


-(BOOL)isValidChinesePhoneNumber{

    

    NSString * MOBILE =@"^1([37][0-9]|5[0-35-9]|8[025-9]|70|77)\\d{8}$";

    

    NSString * CM =@"^1(34[0-8]|(3[5-9]|5[017-9]|8[278])\\d)\\d{7}$";

    

    NSString * CU =@"^1(3[0-2]|5[256]|8[56])\\d{8}$";

    

    NSString * CT =@"^1((33|53|8[09])[0-9]|349)\\d{7}$";

    

    // NSString * PHS = @"^0(10|2[0-5789]|\\d{3})\\d{7,8}$";

    

    NSPredicate *regextestmobile = [NSPredicatepredicateWithFormat:@"SELF MATCHES %@", MOBILE];

    NSPredicate *regextestcm = [NSPredicatepredicateWithFormat:@"SELF MATCHES %@", CM];

    NSPredicate *regextestcu = [NSPredicatepredicateWithFormat:@"SELF MATCHES %@", CU];

    NSPredicate *regextestct = [NSPredicatepredicateWithFormat:@"SELF MATCHES %@", CT];

   BOOL res1 = [regextestmobileevaluateWithObject:self];

   BOOL res2 = [regextestcmevaluateWithObject:self];

   BOOL res3 = [regextestcuevaluateWithObject:self];

   BOOL res4 = [regextestctevaluateWithObject:self];

    

   if (res1 || res2 || res3 || res4 )

    {

       returnYES;

    }

   else

    {

       returnNO;

    }

    

}


- (NSString *) reverseString

{

    NSUInteger len = [selflength];

    // self 表示字符串本身

    NSMutableString *retStr = [NSMutableStringstringWithCapacity:len];

   while (len > 0) {

       unichar c = [selfcharacterAtIndex:--len];

        // 从后取一个字符 unicode

       NSLog(@" c is %C", c);

        NSString *s = [NSStringstringWithFormat:

                      @"%C", c];

        [retStrappendString:s];

    }

    

   if (retStr !=nil && retStr.length > 0) {

       return [retStrcopy];

    }else

    {

       returnnil;

    }

}


#pragma mark -

#pragma mark Resize Height


-(CGFloat)frameHeighWithFontSize:(CGFloat)fontSize viewWidth:(CGFloat)width

{

    NSDictionary *attributes = @{NSFontAttributeName:[UIFontsystemFontOfSize:fontSize]};

   CGSize size =CGSizeMake(0, 0);

   if (iOS7) {

        size  = [selfsizeWithAttributes:attributes];

        

    }else

    {

        size =CGSizeMake(fontSize*self.length, fontSize*1.3);

    }

    

    //   计算每一行的字数,往下取值,

   NSInteger wordsPerLine =floor(width /fontSize);

    

    //   得到取值后的每一行的宽度

   CGFloat widthPerLine = fontSize *wordsPerLine;

    

    //    得到文本的总行数

   NSInteger nLines =ceil(size.width/widthPerLine );

    //   根据行数得到文本的高度

   CGFloat heigh = nLines *(size.height);

    

   return heigh;  

}

@end




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值