用Java风格使用OC——NSString类别

本文介绍如何利用Objective-C的类别特性扩展NSString,创建一个名为NSString+NSStringForJava的类别,将常用的Java String方法如equals、substring和split等引入到OC中,使iOS开发者能以更熟悉的Java方式使用NSString。

Objective-C是IOS开发的基本语言,用过OC的同学都知道,OC的方法名很长,但是表达的意思非常明确,估计设计者也是站在见名知意的角度上去考虑,这种语法风格特别适合母语是英语的人学习,上手会很快,因为写程序就和用英语说话一样。但是对与母语非英语的人来说,过长的方法名在理解上和记忆上就有点吃力了,相信开发IOS的朋友都有一种感觉,当要使用一个方法时,一下记不住方法名,然后去网上搜或查官方文档,但是熟悉之后,还是觉得OC在表达程序意思上还是有不错的地方的。

好了,言归正传,今天主要是利用OC中的类别来扩展NSString的方法,使其使用上比较接近Java的方法,由于我之前做过J2EE和Android,所以对Java是最熟悉的,面对OC中NSString过长的方法名,我自己为它扩展了一个类别,用Java中String的方法名来代替OC中NSString中常用方法,关于什么是类别,简单的说就是在保持原有类不变的情况下,为其增加扩展的方法,这样的目的是可以在保持源文件不变的情况下,动态为其扩展功能。下面来看看具体实现:

首先说明的是,这里没有实现所有Java中String类的方法,只实现了一些常用的,比如equals、subString、split等等...

新建一个文件,选择类别,然后输入类别的名字以及所扩展的类:



输入类别扩展名:



上代码:(需要使用的直接新建一个类别,然后将h和m文件代码考到新建类别中即可)

NSString+NSStringForJava.h

//
//  NSString+NSStringForJava.h
//  NSStringCategory
//
//  Created by Ryan Tang on 12-10-17.
//  Copyright (c) 2012年 Ericsson Labs. All rights reserved.
//

#import <Foundation/Foundation.h>

@interface NSString (NSStringForJava)

//对比两个字符串内容是否一致
- (BOOL) equals:(NSString*) string;

//判断字符串是否以指定的前缀开头
- (BOOL) startsWith:(NSString*)prefix;

//判断字符串是否以指定的后缀结束
- (BOOL) endsWith:(NSString*)suffix;

//转换成大写
- (NSString *) toLowerCase;

//转换成小写
- (NSString *) toUpperCase;

//截取字符串前后空格
- (NSString *) trim;

//用指定分隔符将字符串分割成数组
- (NSArray *) split:(NSString*) separator;

//用指定字符串替换原字符串
- (NSString *) replaceAll:(NSString*)oldStr with:(NSString*)newStr;

//从指定的开始位置和结束位置开始截取字符串
- (NSString *) substringFromIndex:(int)begin toIndex:(int)end;

@end


NSString+NSStringForJava.m

//
//  NSString+NSStringForJava.m
//  NSStringCategory
//
//  Created by Ryan Tang on 12-10-17.
//  Copyright (c) 2012年 Ericsson Labs. All rights reserved.
//

#import "NSString+NSStringForJava.h"

@implementation NSString (NSStringForJava)

//对比两个字符串内容是否一致
- (BOOL) equals:(NSString*) string
{
    return [self isEqualToString:string];
}

//判断字符串是否以指定的前缀开头
- (BOOL) startsWith:(NSString*)prefix
{
    return [self hasPrefix:prefix];
}

//判断字符串是否以指定的后缀结束
- (BOOL) endsWith:(NSString*)suffix
{
    return [self hasSuffix:suffix];
}

//转换成小写
- (NSString *) toLowerCase
{
    return [self lowercaseString];
}

//转换成大写
- (NSString *) toUpperCase
{
    return [self uppercaseString];
}

//截取字符串前后空格
- (NSString *) trim
{
    return [self stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
}

//用指定分隔符将字符串分割成数组
- (NSArray *) split:(NSString*) separator
{
    return [self componentsSeparatedByString:separator];
}

//用指定字符串替换原字符串
- (NSString *) replaceAll:(NSString*)oldStr with:(NSString*)newStr
{
    return [self stringByReplacingOccurrencesOfString:oldStr withString:newStr];
}

//从指定的开始位置和结束位置开始截取字符串
- (NSString *) substringFromIndex:(int)begin toIndex:(int)end
{
    if (end <= begin) {
        return @"";
    }
    NSRange range = NSMakeRange(begin, end - begin);
    return [self substringWithRange:range];
}

@end


使用方法:

NSLog(@"Test equals:%@",[@"aaa" equals:@"aaa"] ? @"YES" : @"NO");
    NSLog(@"Test startWith:%@",[@"abc" startsWith:@"a"] ? @"YES":@"NO");
    NSLog(@"Test endWith:%@",[@"abc" endsWith:@"c"] ? @"YES":@"NO");
    NSLog(@"Test toLowerCase:%@",[@"ABC" toLowerCase]);
    NSLog(@"Test toUpperCase:%@",[@"abc" toUpperCase]);
    NSLog(@"Test trim:%@",[@" abc " trim]);
    NSLog(@"Test replaceAll:%@",[@"abcd" replaceAll:@"bc" with:@"cd"]);
    NSLog(@"Test subString:%@",[@"abcdef" substringFromIndex:1 toIndex:4]);
    NSArray *strArgs = [@"a|b|c" split:@"|"];
    NSLog(@"Test split%d",[strArgs count]);

输出结果:



对Android&IOS感兴趣的朋友可以加入我们的讨论QQ群,在这里,我们只讨论干货:

iOS群:220223507

Android群:282552849


欢迎关注我的新浪微博和我交流:@唐韧_Ryan


评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值