Foundation-NSString类

来源:互联网 发布:visual foxpro是编程吗 编辑:程序博客网 时间:2024/05/17 02:22

  一:Foundation框架:苹果公司提供给我们的工具箱,许多类(有属性,方法),闭源的,看不到代码。

       》1:目标:学习如何使用Foundation框架

       》2:Foundation中的所有的类文件都是以NS开头,方便使用

       》3:NSObject(基类),NSString

       》4:类:有属性,方法;能够通过这个类文件作为模板,来创建对象


二:NSString

》1:@”abd“  :常量,一旦创建完成就不能够再改变

   需要一个相符的变量来接收,创建字符串的方式   

    (1) NSString *str = @"abd";  //[[ NSString alloc]initWithString:@"abd"];

              NSLog(@"%@",str);

    (2)NSString  *str1 = [NSString new];

      (3)   NSString   *str2 = [[ NSString alloc]init];

      (4)   所有的初始化方法最终的目的都是返回相对应的对象  

      (5)  NSString *str3= [NSString stringWithFormat:@"%@,%@",@"a,",@"b"];   //字符串拼接




 NSString *str = @"abbhjklj;mklkl,ld"    得出以下:

》2:字符串长度的获取

  NSUInteger  length = [str length];  //str.length

  NSLog(@"%lu",length);


》3:根据索引获得单个字符(如果你给定的索引值,超出了字符串的长度,就会导致异常  range or index out of              bounds,如果你给入的是一个负数,那么获得的值就是一个乱码)

   unichar  c =[str characterAtIndex:8];//索引值是从0开始的

     NSLog(@"%c",c);   


》4:根据索引获得一个子串,原来的索引并不会发生任何改变

      NSString  *tempStr = [str substringFromIndex:2];//substringFromIndex从给定的索引开始(不包含该索引位置)截取  到字符串末尾

     NSString  *tempStr = [str substringToIndex:2];  //substringToIndex   截取字符串到给定索引的位置结束(不包含该索  引位置)


    NSRange rang = {1,2};  //NSRange中有两个参数  location(起始索引的位置,包含该索引),length(要截取的长度)

    NSString  *tempStr = [str substringWithRange:rang];   //substringWithRange  截取字符串的某一段


     NSLog(@"%@",tempStr);   



5:根据字符串,获得该字符串在另一个字符串中的索引位置

     NSString *str1= @"mklkl";

  NSRange tmpRange = [str  rangOfString:str1];

   NSLog(@"location = %d ,length = %d",tmpRange.location,tmpRange.length);  //不经常用

  也可以这样写

  NSLog(@"rangeOfString %d",NSStingFromRange(tmpRange)); //会打印出{9,5} 

    可以使用NSStingFromRange把一个Range结构体转换成字符串


 如果字符没有在原字符串中,

 if(tmpRange.location == NSNotFound)

{

  NSLog(@"str1 不在  str 中");

}else

 {

    NSLog(@"rangeOfString %d",NSStingFromRange(tmpRange));

}


》6:判断字符串是否为空

 if(str == nil ||  str.length ==0)

{

}


》7:判断字符串是否以指定的内容开头

BOOL isPerfix = [str hasPrefix:@"abb"];

NSLog(@" %@",isPerfix ? @"YES" :@ "NO");  //也可以用if 来判断


》8:判断字符串是否以指定的内容结尾(在开发中常用在  判断文件格式 .txt  .avi  .rmvb mkv  doc)

BOOL isSuffix = [str hasSuffix:@".txt"];

NSLog(@" %@",isSuffix ? @"YES" :@ "NO");


》9:判断两个字符串是否相等

NSString *pstr1 = @"abc";

NSString *pstr2 = @"abc";

//使用== 号 判断两个字符串,实际上是判断字符串地址是否相同,如果地址相同的话,两个字符串相等。

if(pstr1 == pstr2)

{

   NSLog(@"pstr1  与  pstr2");

}


//判断两个字符串是否相等,必须使用NSString 提供给我们的方法,isEqualToString  ,两个步骤
  1:判断两个字符串指针地址是否相等,如果相等直接返回YES
  2:如果地址不相等,会取出字符串的每个字符进行比较

 在实际的开发中,切记不要使用 == 号去判断两个字符是否相等。
但在内存管理set方法中,判断两个字符串是否相等,一定不能够使用  isEqualToString  方法,因为我们就是要判断两个字符串的指针地址是否相等。

BOOL isEqual = [pstr1 isEqualToString:pstr2];
NSLog(@" %@",isEqual ? @"YES" :@ "NO");


》10:compare 是  isEqualToString的增强版本,返回三个参数

NSComparisonResult result = [pstr1 compare pstr2];

如果两者相等,打印出  0  (NSOrderedSame)

如果pstr1 字符的 ASCII 小于  pstr2 字符的 ASCII  ,打印出 NSOrderedAscending   (逐个字符比较)

如果pstr1 字符的 ASCII 大于  pstr2 字符的 ASCII  ,打印出 NSOrderedDescending   (逐个字符比较)


》11:模拟isEqualToString的内部实现

可以创建一个分类 NSStringExt  ,在其.m 文件中实现方法

-(BOOL)myIsEqual:(NSString *)str

{

      //  1:判断两个字符串指针地址是否相等,如果相等直接返回YES

      if(self == str)

      {

          return YES;

      }


     //如果两个字符串的长度不相等

     if(self.length != str.length)

{

   return NO;

}


//逐个字符判断

for(int i=0; i<self.length;i++)

{

   unichar c1= [self characterAtIndex:i];

   unichar c2= [str characterAtIndex:i];

  if(c1  != c2)

  {

      return  NO;

  }

  return  YES;

}


接着在main.m中进行调用

BOOL isEqual3 = [pstr1 myIsEqual:pstr2];
NSLog(@" %@",isEqual3 ? @"YES" :@ "NO");

》12:基本数据类型(int float double char) 与字符串的相互转换

 (1)int 类型转换成字符串

 int a=10;

NSString  *str = [NSString stringWithFormat:@"%d",a];

NSLog(@"%@",str);


(2)float类型转换成字符串

 float f=2.5;

NSString  *str = [NSString stringWithFormat:@"%.1f",f];

NSLog(@"%@",str);


(3)double 类型转换成字符串

 double d=23.6898;

NSString  *str = [NSString stringWithFormat:@"%.4f",d];

NSLog(@"%@",str);


(4)char 类型转换成字符串

 char c='f';

NSString  *str = [NSString stringWithFormat:@"%c",c];

NSLog(@"%@",str);


(5)字符串转换为int基本数据类型

NSString  *str = @"2";

int   i=[str intValue];

NSLog(@"%d",i);


(6)字符串转换为float基本数据类型

NSString  *str = @"2.5";

float   f=[str floatValue];

NSLog(@"%.1f",f);


(7)字符串转换为double基本数据类型

NSString  *str = @"9.89";

double   d=[str  doubleValue];

NSLog(@"%.2f",d);

注:当你要把字符串转换成某种基本数据类型的时候,一定要确定你要转换的数据是正确的


(8)将字符串中的字母转换成大写

 NSString *str = @"china";

NSString  *temStr = [ str uppercaseString];

NSLog(@"%@",temStr);


(9)将字符串中的字母转换成小写

 NSString *str = @"CHINA";

NSString  *temStr = [ str lowercaseString];

NSLog(@"%@",temStr);


(10)将字符串中的首字母转换成大写

 NSString *str = @"china";

NSString  *temStr = [ str capitalizedString];

NSLog(@"%@",temStr);


》13:字符串重组

(1)多个数据拼接成一个字符串

int year = 1993;

int month = 6;

int day = 17;

NSString *date = [NSString stringWithFormat:@"%d年 %d月 %d日 ",year,month,day];

NSLog(@"%@",date);


NSSting *address = @"四川,成都";

NSString *dateAndAddress = [NSString stringWithFormat:@"%@ 地址:%@",date,address];

NSLog(@"%@",dateAndAddress);


(2)在字符串的末尾追加新的字符,str1是不变的,返回回来的都是新的字符串str2

NSString *str1 = @"www.";

NSString  *str2 = [str1 stringByAppendingString:@"china"];

NSLog(@"%@",str2);


(3)在指定的范围追加字符串

NSString *str3 = @"www.com";
NSRange  range = {4,0};  //location 代表的是从哪个索引开始插入,length代表的意思是可以覆盖几个字符

NSString *str4 = [str3 stringByReplacingCharactersInRange:rang withString :@"china."];
NSLog(@"%@",str4);  //结果为www.china.com 


(4)使用新的字符替换原有的字符

NSString *str5= @"www.china.com"; //将. 换成!

NSString *str6 = [str5 stringByReplacingOccurrencesOfString:@"." withString:@"!"];

NSLog(@"%@",str6);  //结果为 www!china!com


(5)在字符串中删除特定的某些字符(过滤掉某些关键字)

NSString *str7= @"www---.china.--com"; 

NSString *str8 = [str7 stringByReplacingOccurrencesOfString:@"-" withString:@""];

NSLog(@"%@",str8);  //结果为 www.china.com


(6)去掉字符串中的空格

NSString *str9= @"www  .china.  com"; 

NSString *str10 = [str9 stringByReplacingOccurrencesOfString:@" " withString:@""];

NSLog(@"%@",str10);  //结果为 www.china.com


》14:字符串文件操作

 》1:将字符串写入到文件中

NSString *content = @"中国风光很好";

NSString *path = @"/Users/apple/Desktop/共享/my.txt";

//1:参数一  要给文件目录,并且要包括文件名称

//2: atomically :YES

//3:NSUTF8StringEncoding  国际通用的编码格式

//4:NSError是用来记录错误信息的

NSError *error;  //如果发生了错误,它会返回&error信息

BOOL isWriteSuccess = [content writeToFile:path atomically:YES encoding:NSUTF8StringEncoding error :&error];

if(isWriteSuccess)
{
  NSLog(@"文件创建成功");
}
else

{

    NSLog(@"error %@",error);

}


》2:从文件中读取字符串内容

//要给出文件路径。  写入文件的时候使用的是什么编码格式,读取的时候就要用什么编码格式,这样就不会出现乱码

NSString *path = @"/Users/apple/Desktop/共享/my.txt";

NSError *error;

NSString *str = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error :&error];

if(error != nil)    //若有错

{

   NSLog(@"error %@",error);

}

else{

  NSLog(@" str content %@",str);

}


》15:可变长度字符串

//NSMutableString继承自NSString,拥有NSString所有的属性和方法

  NSMutableString *muStr = [[NSMutableString alloc]init];  //创建可变字符串

  [muStr setString :@"www"]; //是初始化字符串内容


   [muStr appendString:@".com"];//动态在原来的字符串末尾追加.com,这个方法已经改变了原来的字符串。而不像                    stringByAppendString 方法只是返回一个新的字符串,原字符串没有改变


   [muString  insertString:@".china"  atIndex:3];  //在指定的索引位置,插入字符串

 

  NSRange range ={ 3,6};

  [muStr deleteCharactersInRange:range];  //删除指定范围的字符串,删除的长度,一定不能超出字符串的长度,会导  

致异常,Range or index out of bounds


NSRange range ={ 3,6};

 [muStr  replaceCharactersInRange:range withString:@"中国"];  //替换指定范围内的字符串


0 0
原创粉丝点击