#import <Foundation/Foundation.h>
@interface NSString (Addition)
/**
* 计算字符串的字数。
* @param string:输入字符串。
* return 返回输入字符串的字数。
*/
- (NSInteger)wordsCount;
- (NSString *)URLDecodedString;
- (NSString *)URLEncodedString;
- (NSString *)encodeStringWithUTF8;
- (NSUInteger)byteLengthWithEncoding:(NSStringEncoding)encoding;
- (NSString *)format4n4;
- (NSString *)formatAccount;
- (NSString *)formatAccountTwo;
@end
#import "NSString+Addition.h"
@implementation NSString (Addition)
+ (NSString *)stringWithString:(NSString *)string times:(NSInteger)times{
NSMutableString *result = [[NSMutableString alloc] init];
for (int i = 0; i < times; i++) {
[result appendString:string];
}
return result;
}
- (NSString *)formatAccount
{
NSInteger len = self.length;
NSMutableString *result = [[NSMutableString alloc] init];
for (int i = 0; i < len; i+= 4) {
if (i + 4 >= len) {
[result appendString:[self substringFromIndex:i]];
}else{
[result appendString:[self substringWithRange:NSMakeRange(i, 4)]];
[result appendString:@" "];
}
}
return result;
}
- (NSString *)formatAccountTwo
{
NSInteger len = self.length;
NSMutableString *result = [[NSMutableString alloc] init];
for (int i = 0; i < len; i+= 2) {
if (i + 2 >= len) {
[result appendString:[self substringFromIndex:i]];
}else{
[result appendString:[self substringWithRange:NSMakeRange(i, 2)]];
[result appendString:@" "];
}
}
return result;
}
- (NSString *)format4n4{
NSInteger len = self.length;
if (len < 8) {
return self;
}
NSRange range = NSMakeRange(4, len - 8);
NSString *points = [NSString stringWithString:@"*" times:6];
return [self stringByReplacingCharactersInRange:range withString:points];
}
- (NSInteger)wordsCount
{
NSInteger i,n = [self length], l = 0, a = 0, b = 0;
unichar c;
for(i = 0;i < n; i++)
{
c = [self characterAtIndex:i];
if(isblank(c))
{
b++;
}else if(isascii(c))
{
a++;
}else{
l++;
}
}
if(a == 0 && l == 0) return 0;
return l + (int)ceilf((float)(a + b) / 2.0);
}
//这个编码方法特别管用 特地对牧笛后面的参数进行编码
- (NSString *)URLEncodedString
{
NSString *result = (NSString *)CFBridgingRelease(CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault,
(CFStringRef)self,
NULL,
CFSTR("!*'();:@&=+$,/?%#[]"),
kCFStringEncodingUTF8));
return result;
}
- (NSString *)URLDecodedString
{
NSString *result = (NSString *)CFBridgingRelease(CFURLCreateStringByReplacingPercentEscapesUsingEncoding(kCFAllocatorDefault,
(CFStringRef)self,
CFSTR(""),
kCFStringEncodingUTF8));
return result;
}
- (NSString *)encodeStringWithUTF8
{
NSStringEncoding encoding = CFStringConvertEncodingToNSStringEncoding(kCFStringEncodingISOLatin1);
const char *c = [self cStringUsingEncoding:encoding];
NSString *str = [NSString stringWithCString:c encoding:NSUTF8StringEncoding];
return str;
}
- (NSUInteger)byteLengthWithEncoding:(NSStringEncoding)encoding
{
if (!self)
{
return 0;
}
const char *byte = [self cStringUsingEncoding:encoding];
return strlen(byte);
}
@end