OC String 链式调用 处理增删操作

2018-09-28  本文已影响0人  LiYaoPeng

调用:

  NSString *str1 = @"12342314.000000"
                    .deleteLastStr(@"0")
                    .deleteLastChar()
                    .addFloat(111.010825,3,true);

log : 12342314111.011

.h

//
//  NSString+StringHandler.h
//  OC_AttributedStringHandler
//
//  Created by 李鹏跃 on 2018/9/28.
//  Copyright © 2018年 13lipengyue. All rights reserved.
//

#import <UIKit/UIKit.h>

@interface NSString (StringHandler)


/**
 添加objc对象
 · 参数为id类型
 */
- (NSString *(^)(id objc)) addObjc;


/**
 返回拼接float后的字符串
 · 第一个参数: float
 · 第二个参数: 保留几位小数
 · 第三个参数: 是否四舍五入
 */
- (NSString *(^)(CGFloat value,
                 NSInteger decimalDigits,
                 BOOL isRound)) addFloat;


/**
 添加int字符
 */
- (NSString *(^)(NSInteger value)) addInt;


- (NSString *(^)(NSString *deleteStr)) deleteStr;

/**
 * @brief 从后开始遍历删除指定字符
 * @ 参数为 string
 * @return 返回str.
 */
- (NSString *(^)(NSString *deleteStr)) deleteLastStr;

/**
 * @brief 从前开始遍历删除指定字符
 * @ 参数为 string
 * @return 返回str.
 */
- (NSString *(^)(NSString *deleteStr)) deleteFrontStr;

/**
 * @brief 删除最后一个字符 @ 参数为 void
 */
- (NSString *(^)(void)) deleteLastChar;

/**
 * @brief 删除第一个字符 @ 参数为 void
 */
- (NSString *(^)(void)) deleteFrontChar;




/**
 float 转成字符串
 
 @param value float值
 @param decimalDigits 保留几位小数
 @param isRound 四舍五入或者直接去掉最后的小数
 @return string
 */
+ (NSString *) createWithFloat: (CGFloat)value
                andDecimalDigits: (NSInteger)decimalDigits
                      andIsRound: (BOOL)isRound;

+ (NSString *) createWithInt: (NSInteger)value;
@end

.m

//
//  NSString+StringHandler.m
//  OC_AttributedStringHandler
//
//  Created by 李鹏跃 on 2018/9/28.
//  Copyright © 2018年 13lipengyue. All rights reserved.
//

#import "NSString+StringHandler.h"
#import <math.h>
@implementation NSString (StringHandler)

- (NSString *(^)(id objc)) addObjc {
    return ^(id objc){
        return [NSString stringWithFormat:@"%@%@",self,objc];
    };
}

- (NSString *(^)(CGFloat value, NSInteger decimalDigits, BOOL isRound)) addFloat {
    return ^(CGFloat value, NSInteger decimalDigits, BOOL isRound) {
        NSString *floatValue = [NSString createWithFloat:value
                                       andDecimalDigits:decimalDigits
                                             andIsRound:isRound];
        return [NSString stringWithFormat:@"%@%@",self,floatValue];
    };
}

- (NSString *(^)(NSInteger value)) addInt {
    return ^(NSInteger value) {
        return [NSString stringWithFormat:@"%ld",value];
    };
}

- (NSString *(^)(NSString *deleteStr)) deleteStr {
    return ^ (NSString *deleteStr) {
        NSMutableString *str = self.mutableCopy;
        [str stringByReplacingOccurrencesOfString:deleteStr withString:@""];
        return str;
    };
}

- (NSString *(^)(NSString *deleteStr)) deleteLastStr {
    return ^ (NSString *deleteStr) {
        NSMutableString *str = self.mutableCopy;
        NSInteger i = 0, length = str.length;
        for (i = length - 1; i >= 0; i--) {
           NSString *lastStr = [str substringFromIndex:str.length - 1];
            
            if ([lastStr isEqualToString:deleteStr]) {
                NSRange range = NSMakeRange(i, 1);
                [str deleteCharactersInRange:range];
                
            }else{ break; }
        }
        return str;
    };
}

- (NSString *(^)(NSString *deleteStr)) deleteFrontStr {
    return ^ (NSString *deleteStr) {
        NSMutableString *str = self.mutableCopy;
        NSInteger i, length = str.length;
        NSString *firstStr = [str substringFromIndex:0];
        for (i = 0; i < length; i++) {
            if ([firstStr isEqualToString:deleteStr]) {
                NSRange range = NSMakeRange(0, 1);
                [str deleteCharactersInRange:range];
            }
        }
        return str;
    };
}

- (NSString *(^)(void)) deleteLastChar {
    return ^ {
        NSMutableString *str = self.mutableCopy;
        NSRange range = NSMakeRange(self.length-1, 1);
        [str deleteCharactersInRange:range];
        return str;
    };
}

- (NSString *(^)(void)) deleteFrontChar {
    return ^ {
        NSMutableString *str = self.mutableCopy;
        NSRange range = NSMakeRange(0, 1);
        [str deleteCharactersInRange:range];
        return str;
    };
}

+ (NSString *) createWithFloat: (CGFloat)value
                andDecimalDigits: (NSInteger)decimalDigits
                      andIsRound: (BOOL)isRound {
    
    NSInteger decimalDigitsTemp = decimalDigits;
    CGFloat floatValue = value * (pow(10,decimalDigitsTemp));
    NSInteger integerValue = 0;
    integerValue = isRound ? round(floatValue) : floatValue;
    
    NSMutableString *strTemp = @"".mutableCopy;
    
    for (int i = 0; i < decimalDigitsTemp; i ++) {
        NSInteger value = integerValue % 10;
        
        NSString *valueStr = [NSString stringWithFormat:@"%ld",value];
        [strTemp insertString:valueStr atIndex:0];
        
        integerValue /= 10;
    }
    
    integerValue = value;
    
    return [NSString stringWithFormat:@"%ld.%@",integerValue,strTemp];
}

+ (NSString *) createWithInt: (NSInteger)value {
    return [NSString stringWithFormat:@"%ld",value];
}
@end
上一篇下一篇

猜你喜欢

热点阅读