字符串算是OC中非常重要和常用的一部分内容,OC中的字符串与我之前在学习C,C++,Java中的字符串有一定的不同,它非常类似于C++中容器的概念,但用法却与之还是有很大的不同,也许是因为OC的语法就与其他我们常用的编程语言不尽相同。

这里总结一下字符串NSString与NSMutableString。

一. NSString

NSString代表字符序列不可变的字符串,NSString的功能非常强大,OC的字符串处理比C语言的饿字符串简单、易用得多。

这里我们通过一个具体的例子来进行分析。

创建两个字符串对象:

NSString *str1 = @"this is string A";
NSString *str2 = @"this is string B";

计算字符串中的字符个数

NSLog(@"Length of str1 : %lu" , [str1 length]);

利用stringWithString 将一个字符串复制到另一个字符串:

res = [NSString stringWithString : str1];
NSLog(@"copy : %@" , res);

stringByAppendingString,将一个字符串复制到另一个字符串的末尾:

str2 = [str1 stringByAppendingString:str2];

isEqualToNumber : 方法比较两个NSNumber对象的数值。程序会返回一个BOOL值,查看这两个值是否相等。

isEqualToString,判断两个字符串是否相等:

if([str1 isEqualToString: res] == YES)
NSLog(@"str1 == res");
else
NSLog(@"str1 != res");

compare : 方法测试一个值是否在数值上小于、等于或大于另一个值。
     
如: [intNumber compare : myNumber]
     
若intNumber 小于 myNumber ,返回NSOrderedAscending ;
                           相等                    ,返回NSOrderdSame;
                           大于                    ,返回NSOrderdDescending

       //验证一个字符串是否小于、等于或大于另一个字符串
compareResult = [str1 compare: str2]; if(compareResult == NSOrderedAscending)
NSLog(@"str1 < str2");
else if(compareResult == NSOrderedSame)
NSLog(@"str1 == str2");
else
NSLog(@"str1 > str2");

uppercaseString,将字符串转换为大写。

lowercaseString,将字符串转换为小写。

        //将字符串转换为大写
res = [str1 uppercaseString]; //将字符串转换为小写
res = [str1 lowercaseString];

示例代码如下:

 //
// main.m
// stringTest
//
// Created by heyonggang on 13-12-4.
// Copyright (c) 2013年 MiracleHe. All rights reserved.
// 基本的字符串操作 #import <Foundation/Foundation.h> int main(int argc, const char * argv[])
{ @autoreleasepool { // insert code here...
//NSLog(@"Hello, World!");
NSString *str1 = @"this is string A";
NSString *str2 = @"this is string B";
NSString *res;
NSComparisonResult compareResult; //计算字符串中的字符
NSLog(@"Length of str1 : %lu" , [str1 length]); //将一个字符串复制到另一个字符串
res = [NSString stringWithString : str1];
NSLog(@"copy : %@" , res); //将一个字符串复制到另一个字符串的末尾
str2 = [str1 stringByAppendingString:str2];
NSLog(@"concatentation: %@" , str2); //验证两个字符串是否相等
if([str1 isEqualToString: res] == YES)
NSLog(@"str1 == res");
else
NSLog(@"str1 != res"); //验证一个字符串是否小于、等于或大于另一个字符串
compareResult = [str1 compare: str2]; if(compareResult == NSOrderedAscending)
NSLog(@"str1 < str2");
else if(compareResult == NSOrderedSame)
NSLog(@"str1 == str2");
else
NSLog(@"str1 > str2"); //将字符串转换为大写
res = [str1 uppercaseString];
NSLog(@"uppercase conversion : %s" , [res UTF8String]); //将字符串转换为小写
res = [str1 lowercaseString];
NSLog(@"lowercase conversion : %@" , res); NSLog(@"original string : %@" , str1);
}
return ;
}

代码清单

stringByAppendingString,在字符串后面添加固定的字符串:

str = [str stringByAppendingString:@", iOS!"];

substringToIndex,获取str的前10个字符组成的字符串:

substringToIndex:方法创建了一个子字符串,包括首字符都指定的索引数,但不包括这个字符。因为索引数是从0开始的,所以参数3表示从字符串中提取0、1、2,并返回结果字符串对象。对于所有采用索引数作为参数的字符串方法,如果提供的索引数对该字符串无效,就会获得Range or index out of bounds的出错信息。

        //获取str的前10个字符组成的字符串
NSString *s1 = [str substringToIndex:];
NSLog(@"%@" , s1);

substringFromIndex,获取str从第5个字符开始,与后面字符组成的字符串:

        //获取str从第5个字符开始,与后面字符组成的字符串
NSString *s2 = [str substringFromIndex:];
NSLog(@"%@" , s2);

获取str从第5个字符开始,到第15个字符组成的字符串:

        //获取str从第5个字符开始,到第15个字符组成的字符串
NSString *s3 = [str substringWithRange:NSMakeRange(, )];
NSLog(@"%@" , s3);

rangeOfString , 获取ios在str中出现的位置:

        //获取iOS在str中出现的位置
NSRange pos = [str rangeOfString:@"iOS"];
NSLog(@"ios在str中出现的开始位置:%ld , 长度为:%ld" , pos.location , pos.length);

示例代码如下:

 #import <Foundation/Foundation.h>

 int main(int argc, const char * argv[])
{ @autoreleasepool { NSString *str = @"Hello ";
NSString *book = @"我要学好iOS"; //在str后面追加固定的字符串
//原来的字符串对象并不改变,只是将新生成的字符串重新赋给str指针变量
str = [str stringByAppendingString:@", iOS!"];
NSLog(@"%@" , str); //获取字符串对应的C风格字符串
const char *cstr = [str UTF8String];
NSLog(@"获取的c字符串:%s" , cstr); //在str后面追加带变量的字符串
//原来的字符串对象并不改变,只是将新生成的字符串重新赋给str指针变量
str = [str stringByAppendingFormat:@"%@是非常重要的事情。" , book];
NSLog(@"%@" , str);
NSLog(@"str的字符个数:%lu" , [str length]); //获取str的前10个字符组成的字符串
NSString *s1 = [str substringToIndex:];
NSLog(@"%@" , s1); //获取str从第5个字符开始,与后面字符组成的字符串
NSString *s2 = [str substringFromIndex:];
NSLog(@"%@" , s2); //获取str从第5个字符开始,到第15个字符组成的字符串
NSString *s3 = [str substringWithRange:NSMakeRange(, )];
NSLog(@"%@" , s3); //获取iOS在str中出现的位置
NSRange pos = [str rangeOfString:@"iOS"];
NSLog(@"ios在str中出现的开始位置:%ld , 长度为:%ld" , pos.location , pos.length); }
return ;
}

代码清单

二. NSMutableString

NSMutableString对象代表一个字符序列可变的字符串,而且NSMutableString是NSString的子类,因此前面介绍的NSString所包含的方法,NSMutableString都可以直接使用,NSMutableString对象也可直接当成NSString对象使用。

stringWithString,用不可变字符串创建可变字符串:

        //从不可变字符串创建可变字符串
mstr = [NSMutableString stringWithString:str1];
NSLog(@"%@" , mstr);

insertString,插入字符:

        //插入字符
[mstr insertString:@"mutable" atIndex:];
NSLog(@"%@" , mstr);

insertString:  atIndex:   ,插入末尾进行有效拼接:

        //插入末尾进行有效拼接
[mstr insertString:@" and string B" atIndex:[mstr length]];
NSLog(@"%@" , mstr);

deleteCharactersInRange:NSMakeRange() , 根据范围删除子字符串:

        //根据范围删除子字符串
[mstr deleteCharactersInRange: NSMakeRange(, )];
NSLog(@"%@" , mstr);

查找然后直接删除

        //查找然后将其删除
substr = [mstr rangeOfString:@"string B and "]; if(substr.location != NSNotFound){
[mstr deleteCharactersInRange:substr];
NSLog(@"%@" , mstr);
}

示例代码如下:

 #import <Foundation/Foundation.h>

 int main(int argc, const char * argv[])
{ @autoreleasepool { // insert code here...
//NSLog(@"Hello, World!"); NSString *str1 = @"this is string A";
NSString *search , *replace;
NSMutableString *mstr;
NSRange substr; //从不可变字符串创建可变字符串
mstr = [NSMutableString stringWithString:str1];
NSLog(@"%@" , mstr); //插入字符
[mstr insertString:@"mutable" atIndex:];
NSLog(@"%@" , mstr); //插入末尾进行有效拼接
[mstr insertString:@" and string B" atIndex:[mstr length]];
NSLog(@"%@" , mstr); //直接使用appendString
[mstr appendString:@" and string C"];
NSLog(@"%@" , mstr); //根据范围删除子字符串
[mstr deleteCharactersInRange: NSMakeRange(, )];
NSLog(@"%@" , mstr); //查找然后将其删除
substr = [mstr rangeOfString:@"string B and "]; if(substr.location != NSNotFound){
[mstr deleteCharactersInRange:substr];
NSLog(@"%@" , mstr);
} //直接设置为可变的字符串
[mstr setString:@"this is string A"];
NSLog(@"%@" , mstr); //替换一些字符
[mstr replaceCharactersInRange:NSMakeRange(, ) withString:@" a mutable string"];
NSLog(@"%@" , mstr); //查找和替换
search = @"this is";
replace = @"an example of"; substr = [mstr rangeOfString:search]; if(substr.location != NSNotFound){
[mstr replaceCharactersInRange:substr withString:replace];
NSLog(@"%@" , mstr);
} //查找和替换所有的匹配项
search = @"a";
replace = @"X"; substr = [mstr rangeOfString:search]; while (substr.location != NSNotFound) {
[mstr replaceCharactersInRange:substr withString:replace]; } NSLog(@"%@" , mstr); }
return ;
}

Objective-C: 字符串NSString与NSMutableString的更多相关文章

  1. 14.Object-C--浅谈Foundation框架字符串NSString 与NSMutableString

    OC的字符串时经常使用到的,今天我对于OC字符串做一个简单的总结,如果有错误之处,麻烦留言指正.感谢! NSString是一个不可变长度的字符串对象.表示它初始化以后,你不能改变该变量所分配的内存中的 ...

  2. OC之字符串 NSString与NSMutableString

    一.NSString 不可变字符串的操作1)将字符串常量对象直接赋值给字符串引用 NSString *str1=@"hello"; 字符串对象的输出格式:NSLog(@" ...

  3. 字符串NSString与NSMutableString常用方法

    NSString 1.初始化 NSString *str1 = @"a OC Program"; 2.初始化 NSString *str2 = [[NSString alloc] ...

  4. bjective-C 中核心处理字符串的类是 NSString 与 NSMutableString

    Objective-C 中核心处理字符串的类是 NSString 与 NSMutableString ,这两个类最大的区别就是NSString 创建赋值以后该字符串的内容与长度不能在动态的更改,除非重 ...

  5. 关于NSString和NSMutableString的相关用法和基本介绍

    Objective-C 中核心处理字符串的类是 NSString 与 NSMutableString ,这两个类最大的区别就是NSString 创建赋值以后该字符串的内容与长度不能在动态的更改,除非重 ...

  6. Objective的字符串拼接 似乎没有Swift方便,但也可以制做一些较为方便的写法

    NSString *str1 = @"字符串1"; NSString *str2 = @"字符串2"; //在同样条件下,Objective的字符串拼接 往往只 ...

  7. Foundation框架-NSString和NSMutableString

    可变与不可变的字符串 --1-- Foundation框架介绍 1.1 框架介绍 --2-- NSString 2.1 NSString介绍及使用 2.2 NSString创建方式  2.3 从文件中 ...

  8. NSString和NSMutableString常用方法+NSArray常用代码 (转)

    常见的NSString和NSMutableString方法: NSString方法: [plain] view plaincopy   +(id) stringWithContentsOfFile:p ...

  9. iOS基础-NSString及NSMutableString剖析

    一.NSString头文件 NSString : NSObject 实现协议: NSCopying/NSMutableCopying/NSSecureCoding 类别: //扩展类别 NSStrin ...

随机推荐

  1. php开发memcached

    一.memcached 简介 memcached是高性能的分布式内存缓存服务器.一般的使用目的是,通过缓存数据库查询结果,减少数据库访问次数,以提高动态Web应用的速度.提高可扩展 性.它可以应对任意 ...

  2. MySQL中char(36)被认为是GUID导致的BUG及解决方案

    MySQL中char(36)被认为是GUID导致的BUG及解决方案 有时候在使用Toad或在程序中,偶尔会遇到如下的错误: System.FormatException GUID 应包含带 4 个短划 ...

  3. @Resource注解

    原文地址:http://blog.sina.com.cn/s/blog_a795a96f01016if1.html   @Resource 注解被用来激活一个命名资源(named resource)的 ...

  4. Python_day8_面向对象(多态、成员修饰符、类中特殊方法、对象边缘知识)、异常处理之篇

    一.面向对象之多态 1.多态:简而言子就是多种形态或多种类型 python中不支持多态也用不到多态,多态的概念是应用与java/C#中指定传参的数据类型, java多态传参:必须是传参数的数据类型或传 ...

  5. jQuery tmpl用法总结

    之前很是头疼循环数据的渲染,搞一大堆的命名,一点点的赋值,很是麻烦,今天学习了一下jQuery插件tmpl,下面抛出一些使用方法,供以后参考: 官方网址:http://web.archive.org/ ...

  6. R(四): R开发实例-map分布图

    前几章对R语言的运行原理.基本语法.数据类型.环境部署等基础知识作了简单介绍,本节将结合具体案例进行验证测试. 案例场景:从互联网下载全国三甲医院数据,以地图作为背景,展现各医院在地图上的分布图.全国 ...

  7. MS CRM 2011的自定义和开发(11)——插件(plugin)开发(四)

    http://www.cnblogs.com/StoneGarden/archive/2012/02/08/2343294.html MS CRM 2011的自定义和开发(11)——插件(plugin ...

  8. php 导出csv文件

    <?php $sql = "select * from members_sqzj order by id asc"; $result = $db->fetch_All( ...

  9. IsolatedStorageException for Silverlight Application

    if you are using the IsolatedStorage for application configuration storage, and when you get the Iso ...

  10. <<编写可维护的JavaScript>>之避免使用全局变量

    一.避免全局变量的理由 js中避免创建全局变量一是避免命名冲突,二是避免因为创建全局变量让代码变得脆弱,三是创建全局变量会让代码难以测试. 二.避免创建全局变量的几种方法 //避免全局变量 避免命名冲 ...