您的位置:首页 > 移动开发 > IOS开发

IOS字符串拼接方法小结

2014-10-24 00:00 671 查看
摘要: 各种语言有不同的字符串拼接方式,java 、c++等语言字符串拼接最为简单,直接使用“+”就搞定了。例如"select * from " + tablename + "where id=" + id 但是使用OC恶心的语法写出的代码也非常恶心。下面总结下

在编程过程中很多时候需要拼接字符串。在使用FMDB管理sqlite数据库,手写的SQL语句总是要拼接字符串。

各种语言有不同的字符串拼接方式,java 、c++等语言字符串拼接最为简单,直接使用“+”就搞定了。例如"select * from " + tablename + "where id=" + id 但是使用OC恶心的语法写出的代码也非常恶心。下面总结下

方法一、使用 stringWithFormat 格式化字符串

<!-- lang: cpp -->
NSString*sql = [NSString stringWithFormat:"select * from %@ where id='%@'",tablename,id];

方法二、使用stringByAppendingString

<!-- lang: cpp -->
NSString*sql = [[[[@"select * from " stringByAppendingString:tablename] stringByAppendingString:@"where id='"]stringByAppendingString:id]stringByAppendingString:@"'"];

或者

<!-- lang: cpp -->
NSString*sql = [@"select * from " stringByAppendingString:tablename];
sql = [sql stringByAppendingString:@"where id='"];
sql = [sql stringByAppendingString:id];
sql = [sql stringByAppendingString:@"'"];

方法三、使用stringByAppendingFormat
这个是把方法一和方法二结合结合起来的一个方法。

一直想找个好的方法,既直观又方便。

甚至还想到用宏。

<!-- lang: cpp -->
#define _SQL(x)  #x
#define SQL(x)   _SQL(x)

可惜所有的表名、字段名都要定义为宏,且NULL值不好处理。
最后想到使用不定长参数来拼接字符串,将上面的方法封装起来。

方法四、+ (NSString*)NStr:(NSString*) str,...

<!-- lang: cpp -->
// 拼接字符串
+ (NSString*)NStr:(NSString*) str,...
{
if (!str) {
return nil;
}
NSMutableString *ret = [NSMutableString stringWithFormat:@"%@",str];
id          obj = nil;
va_list     args;
va_start(args, str);

while ((obj = va_arg(args, id))) {
if ([obj isKindOfClass:[NSString class]]) {
[ret appendString:obj];
} else {
NSLog(@"<NStr>:WARNING %@ is not a NSString", [obj class]);
}
}
va_end(args);
return ret;
}
// 使用
[类名 NStr:@"select * from ",tableName,@" where id='",id,@"'",nil];

虽然可以拼接字符串了,但是看着还是不怎么直观。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息