NSString相关

本文详细介绍Objective-C中字符串的各种操作方法,包括长度获取、拼接、检索、替换等,并提供了实例演示如何实现这些功能。

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

字符串长度

int len = [@"Hello" length];
 

可变字符串

SMutableString *string1;

NSMutableString *string2=[[NSMutableStringalloc]init];//初始化

string1 = [NSMutableString stringWithString: @"This is a string"];

string2 = string1;

[string2 appendString: @" and it is mine!"]; 
 
对字符串进行检索

NSString *string1 = @"The quick brown fox jumped";

NSRange match;
 match = [string1 rangeOfString: @"brown fox"];

if (match.location == NSNotFound)

          NSLog (@"Match not found");  

location 的意思就是所寻找的字符串的起始位置,注意是从0开始数而不是1,length 就是找到的这个字符串有多长,这个是从1开始数的   
如果没有找到,系统会给location 设置成NSNotFound

替换部分字符
[string1 replaceCharactersInRange: NSMakeRange(16, 3) withString: @"squirrel"];

删除部分字符 
[string1 deleteCharactersInRange: [string1 rangeOfString: @"jumped"]];

截取字符串

NSMutableString *string1 = [NSMutableString stringWithString: @"The quick brown fox jumped"];

NSString *string2;

string2 = [string1 substringWithRange: NSMakeRange (4, 5)];  

NSString *string3;

string3 = [string1 substringFromIndex: 4]; 


NSString*string =@"sdfsfsfsAdfsdf";
string = [string substringToIndex:7];//截取下标7之前的字符串,不包括7
NSLog(@"截取的值为:%@",string);
[string substringFromIndex:2];//截取下标2之后的字符串,包括2
NSLog(@"截取的值为:%@",string);

插入字符
[string1 insertString: @"agile, " atIndex: 4]; 

比较字符串

NSString *string1 = @"My String";

NSString *string2 = @"My String";

if (string1 == string2)

        NSLog (@"地址相等");

else if ([string1 isEqualToString: string2])

        NSLog (@"内容相等");  

查看字符串的前缀和后缀

NSString *string1 = @"The quick brown fox jumped";

BOOL result;

result = [string1 hasPrefix: @"The"];

if (result)

        NSLog (@"String begins with The");

 

result = [string1 hasSuffix: @"dog"];

if (result)

        NSLog (@"String ends with dog"); 

 单词首字母大写:

NSString *string1 = @"The quicK brOwn fox jumpeD";

NSString *string2;

string2 = [string1 capitalizedString];

结果是 "The Quick Brown Fox Jumped" .

 

   全部小写

NSString *string1 = @"The quicK brOwn fox jumpeD";

NSString *string2;

string2 = [string1 lowercaseString];

结果是 "the quick brown fox jumped".

 

全部大写

NSString *string1 = @"The quicK brOwn fox jumpeD";

NSString *string2;

string2 = [string1 uppercaseString];

结果是 "THE QUICK BROWN FOX JUMPED".

以上例子改变的都是string2,而string1仍然保持原样不变。

把字符串转成数字类型

转换为 int

NSString *string1 = @"10";

int myInt = [string1 intValue];

NSLog (@"%i", myInt);

 

•   转换为 double

NSString *string1 = @"10.1092";

double myDouble = [string1 doubleValue];

NSLog (@"%f", myDouble);

 

•   转换为 float

NSString *string1 = @"10.1092";

float myFloat = [string1 floatValue];

NSLog (@"%f", myFloat);

 

•   转换为 NSInteger

NSString *string1 = @"10";

NSInteger myInteger = [string1 integerValue];

NSLog (@"%li", myInteger);
 

  NSString *tempA = @"123";
 
  NSString *tempB = @"456";

字符串拼接

 NSString *newString = [NSString stringWithFormat:@"%@%@",tempA,tempB];


int转字符

NSString *stringInt = [NSString stringWithFormat:@"%d",intString];


float转字符
NSString *stringFloat = [NSString stringWithFormat:@"%f",intString];

  

把字符串转换为 ASCII 

NSString *string1 = @"The quick browen fox";

const char *utfString = [string1 UTF8String]; 


字符串与 NSData互转

NSString* aStr = [[NSString alloc] initWithData:aData encoding:NSASCIIStringEncoding];

NSData* aData = [aStr dataUsingEncoding: NSASCIIStringEncoding]; 

NSData-> Byte数组
Byte *testByte = (Byte *)[aData bytes]; 
NSData *adata = [[NSData allocinitWithBytes: testByte length:24]; 

Byte数组->16进制数

Byte *bytes = (Byte *)[aData bytes];

NSString *hexStr=@"";

for(int i=0;i<[encryData length];i++)

{

NSString *newHexStr = [NSString stringWithFormat:@"%x",bytes[i]&0xff];///16进制数

if([newHexStr length]==1)

hexStr = [NSString stringWithFormat:@"%@0%@",hexStr,newHexStr];

else 

hexStr = [NSString stringWithFormat:@"%@%@",hexStr,newHexStr];

}

NSLog(@"bytes 的16进制数为:%@",hexStr);

 

16进制数->Byte数组

///// 将16进制数据转化成Byte 数组

NSString *hexString = @"3e435fab9c34891f"; //16进制字符串

int j=0;

Byte bytes[128];  ///3ds key的Byte 数组, 128位

for(int i=0;i<[hexString length];i++)

{

int int_ch;  /// 两位16进制数转化后的10进制数

 

unichar hex_char1 = [hexString characterAtIndex:i]; ////两位16进制数中的第一位(高位*16)

int int_ch1;

if(hex_char1 >= '0' && hex_char1 <='9')

int_ch1 = (hex_char1-48)*16;   //// 0 的Ascll - 48

else if(hex_char1 >= 'A' && hex_char1 <='F')

int_ch1 = (hex_char1-55)*16//// A 的Ascll - 65

else 

int_ch1 = (hex_char1-87)*16//// a 的Ascll - 97

i++;

 

unichar hex_char2 = [hexString characterAtIndex:i]; ///两位16进制数中的第二位(低位)

int int_ch2;

if(hex_char2 >= '0' && hex_char2 <='9')

int_ch2 = (hex_char2-48); //// 0 的Ascll - 48

else if(hex_char1 >= 'A' && hex_char1 <='F')

int_ch2 = hex_char2-55//// A 的Ascll - 65

else 

int_ch2 = hex_char2-87//// a 的Ascll - 97

 

int_ch = int_ch1+int_ch2;

NSLog(@"int_ch=%d",int_ch);

bytes[j] = int_ch;  ///将转化后的数放入Byte数组里

j++;

}

NSData *newData = [[NSData allocinitWithBytes:bytes length:128];

NSLog(@"newData=%@",newData);

 

3. NSData 与 UIImage

NSData->UIImage

UIImage *aimage = [UIImage imageWithData: imageData];

 

//例:从本地文件沙盒中取图片并转换为NSData

NSString *path = [[NSBundle mainBundle] bundlePath];

NSString *name = [NSString stringWithFormat:@"ceshi.png"];

NSString *finalPath = [path stringByAppendingPathComponent:name];

NSData *imageData = [NSData dataWithContentsOfFile: finalPath];

UIImage *aimage = [UIImage imageWithData: imageData];

 

UIImage-> NSData

NSData *imageData = UIImagePNGRepresentation(aimae);  


判断邮箱输入的是否正确: 

- (BOOL) validateEmail: (NSString *) candidate {

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

NSPredicate *emailTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", emailRegex]; 

return [emailTest evaluateWithObject:candidate];

获取现在的时间:

 NSDate *date = [NSDate date];
 NSDateFormatter *formater = [[NSDateFormatter alloc]init];
    [formater setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
    NSString *datestring = [formater stringFromDate:date];
获取当前的时间戳:double st = [[NSDate date]timeIntervalSince1970]
通过时间戳转为时间: NSDate* date = [NSDate dateWithTimeIntervalSince1970:timestamp];
    NSDateFormatter* dateFormatter = [[NSDateFormatter alloc] init];
    [dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];

    NSString* dateString = [dateFormatter stringFromDate:date];



字符串转字典

  1. NSData *jsonData = [jsonString dataUsingEncoding:NSUTF8StringEncoding];  
  2.     NSError *err;  
  3.     NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:jsonData  
  4.                                                         options:NSJSONReadingMutableContainers  
  5.                                                           error:&err]; 

字符串转数组

  1. NSData *jsonData = [jsonString dataUsingEncoding:NSUTF8StringEncoding];  
  2.  
  3.     NSArray *dic =  [NSJSONSerialization JSONObjectWithData:jsonData options:kNilOptions error:nil];
  4.  


日期和时间戳


  1. 设置时间显示格式:  
  2.     NSString* timeStr = @"2011-01-26 17:40:50";  
  3.     NSDateFormatter *formatter = [[[NSDateFormatter alloc] init] autorelease];  
  4.     [formatter setDateStyle:NSDateFormatterMediumStyle];  
  5.     [formatter setTimeStyle:NSDateFormatterShortStyle];     
  6.     [formatter setDateFormat:@"YYYY-MM-dd HH:mm:ss"]; // ----------设置你想要的格式,hh与HH的区别:分别表示12小时制,24小时制  
  7.      
  8.     //设置时区,这个对于时间的处理有时很重要  
  9.     //例如你在国内发布信息,用户在国外的另一个时区,你想让用户看到正确的发布时间就得注意时区设置,时间的换算.  
  10.     //例如你发布的时间为2010-01-26 17:40:50,那么在英国爱尔兰那边用户看到的时间应该是多少呢?  
  11.     //他们与我们有7个小时的时差,所以他们那还没到这个时间呢...那就是把未来的事做了  
  12.      
  13.     NSTimeZone* timeZone = [NSTimeZone timeZoneWithName:@"Asia/Shanghai"];  
  14.     [formatter setTimeZone:timeZone];  
  15.      
  16.     NSDate* date = [formatter dateFromString:timeStr]; //------------将字符串按formatter转成nsdate  
  17.              
  18.     NSDate *datenow = [NSDate date];//现在时间,你可以输出来看下是什么格式  
  19.      
  20.     NSString *nowtimeStr = [formatter stringFromDate:datenow];//----------将nsdate按formatter格式转成nsstring  
  21. 时间转时间戳的方法:  
  22.     NSString *timeSp = [NSString stringWithFormat:@"%d", (long)[datenow timeIntervalSince1970]];  
  23.     NSLog(@"timeSp:%@",timeSp); //时间戳的值  
  24.  时间戳转时间的方法  
  25.     NSDate *confromTimesp = [NSDate dateWithTimeIntervalSince1970:1296035591];  
  26.     NSLog(@"1296035591  = %@",confromTimesp);        
  27.     NSString *confromTimespStr = [formatter stringFromDate:confromTimesp];  
  28.     NSLog(@"confromTimespStr =  %@",confromTimespStr);  
  29. 时间戳转时间的方法:  
  30. NSDateFormatter* formatter = [[NSDateFormatter alloc] init];  
  31. [formatter setDateStyle:NSDateFormatterMediumStyle];  
  32. [formatter setTimeStyle:NSDateFormatterShortStyle];  
  33. [formatter setDateFormat:@"yyyyMMddHHMMss"];  
  34. NSDate *date = [formatter dateFromString:@"1283376197"];  
  35. NSLog(@"date1:%@",date);  
  36. [formatter release];  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值