35-oc String

字符串创建

下面所有的方法都是对字符串的增删改查

什么是NSString

一个NSString对象就代表一个字符串(文字内容) 一般称NSString为字符串类



如何创建NSString对象?有几种方法创建一个NSString字符串

通过@""直接创建

// 如果通过@""创建字符串, 那么会将字符串放到常量区中

// 如果是字符串常量, 那么只要内容相同 , 不会重复创建

NSString *str1 = @"lnj";

通过alloc或者类工厂方法创建

如果是通过alloc或者类工厂方法创建, 那么会将字符串放到堆区中

NSString *str2 = [[NSString alloc] initWithString:@"lnj"];

NSString *str3 = [NSString stringWithFormat:@"lmj"];



字符串读写上

如何从文件中读取字符串?什么是绝对路径?编码的常用格式是什么?错误信息是如何读取的?

file: 文件路径,

encoding: 编码英文 iOS-5988-1 中文 GBK GBK2312 , 一般情况填写UTF-8

error: 如果读取错误, 会将错误信息保存到error中 ,如果读取正确, 就没有error = nil

注意: 以后在OC方法中但凡看到XXXofFile的方法, 传递的一定是全路径(绝对路径)

NSString *path = @"路径;

NSError *error = nil;

// 从文件中读取字符串

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

if (error == nil) {

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

}else

{

//localizedDescription 打印真正错误信息

NSLog(@"error = %@", [error localizedDescription]);

如何将字符串写入到文件中

NSString *str = @"iOS0601";

// atomically 如果传入YES, 字符串写入文件的过程中如果没有写完, 那么不会生成文件

//            如果传入NO, 字符串写入文件的过程中如果没有写完, 会生成文件

NSString *path2 = @"/Users/Desktop/abc.txt";

BOOL flag = [str writeToFile:path2 atomically:YES encoding:NSUTF8StringEncoding error:nil];

NSLog(@"flag = %i", flag);



字符串读写下(通过URL获取数据)

什么是URL

URL的全称是Uniform Resource Locator(统一资源定位符)

URL是互联网上标准资源的地址

互联网上的每个资源都有一个唯一的URL,它包含的信息指出资源的位置

根据一个URL就能找到唯一的一个资源



书写URL格式

URL = 协议头://主机地址/路径



如何创建URL

通过alloc 或者类工厂方法创建

NSURL *url = [NSURL URLWithString:@"file:///Users/LNJ/Desktop/str.txt"];

NSURL *url = [[NSURL alloc] initWithString:@"file:///Users/LNJ/Desktop/str.txt"];

通过文件路径创建(默认就是file协议的)

NSURL *url = [NSURL fileURLWithPath:@"/Users/LNJ/Desktop/str.txt"];



如何获取本地路径的信息?获取本地路径信息的方法有什么注意点

获取本地路径信息--fileURLWithPath

1.字符串保存路径

NSString *path = @"路径";

NSLog(@"url编码前: %@", path);

2.将路径中中文转换为UTF-8编码格式

path = [path stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

NSLog(@"url编码后: %@", path);

方法二:

1.字符串保存路径,如果访问本机的文件, 可以省略主机地址

NSString *path = @"file:///Users/xiaomage/Desktop/课堂共享/day17/note/lnj.txt";

NSLog(@"url编码前: %@", path);

2.将路径中中文转换为UTF-8编码格式

path = [path stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

NSLog(@"url编码后: %@", path);

NSURL *url = [NSURL URLWithString:path];

3.获取本地路径的信息

NSURL *url = [NSURL fileURLWithPath:@"/Users/xiaomage/Desktop/课堂共享/day17/note/lnj.txt"];

NSError *error = nil;

NSString *str = [NSString stringWithContentsOfURL:url encoding:NSUTF8StringEncoding error:&error];

if (error == nil) {

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

}else{

NSLog(@"error = %@", [error localizedDescription]);

}

注意点:

URLWithString: 方法不支持中文,所以无法成功创建URL,必须先对路径字符串进行编码

fileURLWithPath: 方法支持中文,并且省略协议头,但是只能获取本地方法



如何获取网络路径的信息

获取网络路径的信息--URLWithString

NSURL *url = [NSURL URLWithString:@"http://www.baidu.com"];

NSString *str = [NSString stringWithContentsOfURL:url encoding:NSUTF8StringEncoding error:nil];

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

如何将信息写入到指定文件

方法一:

NSString *str = @"lnj";

NSString *path = @"file:///Users/NJ-Lee/Desktop/未命名文件夹/abc.txt";

path = [path stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

NSURL *url = [NSURL URLWithString:path];

[str writeToURL:url atomically:YES encoding:NSUTF8StringEncoding error:nil];

方法二:

NSString *str = @"lnj";

NSString *path = @"/Users/xxx/Desktop/未命名文件夹/abc.txt";

NSURL *url = [NSURL fileURLWithPath:path];

[str writeToURL:url atomically:YES encoding:NSUTF8StringEncoding error:nil];

总结:

如果多次往同一个文件中写入内容,那么后一次的会覆盖前一次的

方法名中没有file,路径中要添加上file协议头,如果方法名中有file,路径中就不需要file协议头



字符串比较

NSString *str1 = @"abc";

NSString *str2 = @"ABC";

如何比较两个字符串的"内容"是否相同

BOOL flag = [str1 isEqualToString:str2];

NSLog(@"flag = %i", flag);

如何比较两个字符串的"地址"是否相同

flag = (str1 == str2);

NSLog(@"flag = %i", flag);

如何比较字符串的大小

答:使用方法compare:

// NSOrderedAscending  前面的小于后面的

// NSOrderedSame,  两个字符串相等

// NSOrderedDescending  前面的大于后面的

switch ([str1 compare:str2]) {

case NSOrderedAscending:

NSLog(@"str1小于str2");

break;

case NSOrderedSame:

NSLog(@"str1等于str2");

break;

case NSOrderedDescending:

NSLog(@"str1大于str2");

break;

default:

break;

}

如何忽略大小写进行比较

switch ([str1 caseInsensitiveCompare:str2]) {

case NSOrderedAscending:

NSLog(@"str1小于str2");

break;

case NSOrderedSame:

NSLog(@"str1等于str2");

break;

case NSOrderedDescending:

NSLog(@"str1大于str2");

break;

default:

break;

}



字符串搜索

如何判断字符串是以什么开头的?本质是什么

// 本质就是从字符串的第一个字符开始匹配, 只要不匹配就返回NO

if ([str hasPrefix:@"http://"]) {

NSLog(@"是一个URL");

}else

{

NSLog(@"不是一个URL");

}

如何判断字符串是否以什么结尾的?本质是什么

// 本质就是从字符串的最后一个字符开始匹配, 只要不匹配就返回NO

if ([str hasSuffix:@".gif"]) {

NSLog(@"动态图片");

}else{

NSLog(@"不是动态图片");

}

如何判断字符串中是否包含520本质是什么

NSString *str = @"abcd";

// 只要str中包含该字符串, 那么就会返回该字符串在str中的起始位置以及该字符串的长度

// location从0开始 , length从1开始

// 如果str中没有需要查找的字符串, 那么返回的range的length=0, location = NSNotFound

NSRange range =  [str rangeOfString:@"lnj"];

//    if (range.location == NSNotFound) {

if (range.length == 0){

NSLog(@"str中没有需要查找的字符串");

}else{

NSLog(@"str中有需要查找的字符串");

NSLog(@"location = %lu, length = %lu", range.location, range.length);

}



字符串截取

OC中的结构体,使用什么开头的方法创建

NSString *str = @"<head>Home</head>";

如何获取指定范围内的字符串

1.动态获取截取的起始位置

NSUInteger location = [str rangeOfString:@">"].location + 1;

2.动态获取截取的长度

// 注意:rangeOfString是从左至右的开始查找, 只要找到就不找了

NSUInteger length = [str rangeOfString:@"</"].location - location;

NSRange range = NSMakeRange(location, length);

NSString *newStr = [str substringWithRange:range];

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

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

如何截取字符串

<head>Home</head> --> Home</head>  --> Home

<head>Home</head> --> <head>Home  --> Home

NSUInteger location = [str rangeOfString:@">"].location + 1;

NSString *newStr = [str substringFromIndex:location];

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

location = [newStr rangeOfString:@"</"].location;

// 改变了指针的指向, 并不是修改了原来的字符串

newStr = [newStr substringToIndex:location];

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



字符串替换

了解字符串替换方法,和怎么填方法中的参数

如何替换字符串中的部分字符

//需求: 将&符号替换为/

NSString *str = @"http:&&www.520.com&img&ywc.gif";

// OccurrencesOfString: 要替换谁

// withString: 用谁替换

NSString *newStr = [str stringByReplacingOccurrencesOfString:@"&" withString:@"/"];

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

如何对字符串首位进行处理

NSString *str = @"HTTP://www.520it.com/img/LNJ.GIF";

NSCharacterSet *set = [NSCharacterSet uppercaseLetterCharacterSet];

NSString *newStr = [str stringByTrimmingCharactersInSet:set];

NSLog(@"newStr = |%@|", newStr);



获取路径方法的本质

NSString *str = @"User/lnj/Desktop/ywc.txt.jpg";

如何判断是否是绝对路径

其实:本质就是判断字符串是否以/开头

if([str isAbsolutePath])

{

NSLog(@"是绝对路径");

}else{

NSLog(@"不是绝对路径");

}

如何获取文件路径中的最后一个目录

本质:就是获取路径中最后一个/后面的内容

NSString *newStr = [str lastPathComponent];

NSLog(@"%@", newStr);

如何删除文件路径中的最后一个目录

本质:就是删除最后一个/后面的内容, 包括/也会被删除

NSString *newStr = [str stringByDeletingLastPathComponent];

NSLog(@"%@", newStr);

如何给文件路径添加一个目录

本质:就是在字符串的末尾加上一个/ 和指定的内容

注意: 如果路径后面已经有了/, 那么就不会添加了

如果路径后面有多个/, 那么会自动删除多余的/, 只保留一个

NSString *newStr = [str stringByAppendingPathComponent:@"ywc"];

NSLog(@"%@", newStr);

如何获取路径中文件的扩展名

本质:就是从字符串的末尾开始查找., 截取第一个.后面的内容

NSString *newStr = [str pathExtension];

NSLog(@"%@", newStr);

如何删除路径中文件的扩展名

本质就是从字符串的末尾开始查找.,删除第一个.和.后面的内容

NSString *newStr = [str stringByDeletingPathExtension];

NSLog(@"%@", newStr);

如何给文件路径添加一个扩展名

本质:就是在字符串的末尾加上一个.和指定的内容

NSString *newStr = [str stringByAppendingPathExtension:@"jpg"];

NSLog(@"%@", newStr);



字符串转换

NSString *str = @"abc";

如何将将字符串转换为大写

NSString *newStr = [str uppercaseString];

NSLog(@"%@", newStr);

如何将字符串转换为小写

NSString *newStr2 = [newStr lowercaseString];

NSLog(@"%@", newStr2);

htpp://www.520.com/img/ywc.GIF;

如何将字符串的首字符转换为大写

NSString *newStr = [str capitalizedString];

NSLog(@"%@", newStr);

如何字符串与基本数据类型的转换

NSString *str1 = @"110";

NSString *str2 = @"120";

//    str1 + str2; // 错误

int value1 = [str1 intValue];

int value2 = [str2 intValue];

NSLog(@"sum = %i", value1 + value2);

// 注意: 如果不是int,double,float,bool,integer,longlong这些类型就不要乱用

NSString *str3 = @"abc";

int value3 = [str3 intValue];

NSLog(@"value3 = %i", value3);

如何C语言字符串和OC字符串之间的转换

char *cStr = "ywc";

NSString *str = [NSString stringWithUTF8String:cStr];

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

NSString *newStr = @"xxx";

constchar *cStr2 = [newStr UTF8String];

NSLog(@"cStr2 = %s", cStr2);



NSMutalbleString 基本概念

NSMutableString和NSString的区别

NSString是不可变的, 里面的文字内容是不能进行修改的

NSMutableString是可变的, 里面的文字内容可以随时更改

NSMutableString能使用NSString的所有方法

什么是可变字符串?什么是不可变字符串

不可变字符串:指的是字符串在内存中占用的存储空间固定,并且存储的内容不能发生变化

可变字符串:指的是字符串在内存中占用的存储空间可以不固定,并且存储的内容可以被修改



NSMutalbleString常用方法

对可变字符串增删改查

NSMutableString *strM = [NSMutableString stringWithFormat:@"www.520.com.520"];

在字符串后面添加一段字符串

[strM appendString:@"/image"];

[strM appendFormat:@"/age is %i", 10];

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

如何删除字符串中的520

技巧: 在开发中, 我们经常利用rangeOfString和deleteCharactersInRange方法配合起来删除指定的字符串

先查找出520在字符串中的位置

NSRange range = [strM rangeOfString:@"520"];

删除520

[strM deleteCharactersInRange:range];

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

如何在520前面插入love这个单词

// insertString : 需要插入的字符串

// atIndex: 从哪里开始插入

NSRange range = [strM rangeOfString:@"520"];

[strM insertString:@"love" atIndex:range.location];

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

如何将字符串中的520替换为530

注意: 如果是调用NSString的字符串替换方法, 不会修改原有字符串, 而是生产一个新的字符串

NSString *newStr =[strM stringByReplacingOccurrencesOfString:@"520" withString:@"530"];

注意:

一般情况下OC方法要求传入一个参数如果没有*, 大部分都是枚举

一般情况下如果不想使用枚举的值, 可以传入0, 代表按照系统默认的方式处理

OccurrencesOfString: 需要替换的字符串

withString: 用什么替换

options: 替换时的搜索方式

range: 搜索的范围

返回值: 代表替换了多少个字符串

NSUInteger count = [strM replaceOccurrencesOfString:@"520" withString:@"530" options:0 range:NSMakeRange(0, strM.length)];

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

NSLog(@"count = %lu", count);



NSMutalbleString练习

拼接字符串有几种方法?

需求: 将3个520拼接在一起, 中间用空格隔开520 520 520

NSString *subStr = @"520";

方法一:

// 520-

NSString *newStr = [subStr stringByAppendingString:@" "];

// 520-520

newStr = [newStr stringByAppendingString:subStr];

// 520-520-

newStr = [newStr stringByAppendingString:@" "];

// 520-520-520

newStr = [newStr stringByAppendingString:subStr];

方法二:

注意: 在开发中如果需要对字符串进行频繁的操作, 不要使用不可变的字符串

NSString *newStr = [subStr stringByAppendingString:@" "];;

for (int i = 0; i < 2; ++i) {

newStr = [newStr stringByAppendingString:subStr];

newStr = [newStr stringByAppendingString:@" "];

}

// newStr = [newStr stringByReplacingCharactersInRange:NSMakeRange(newStr.length -1 , 1) withString:@""];

newStr = [newStr stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];

NSLog(@"newStr = |%@|", newStr);

方法三:

// 创建一个空得字符串

NSMutableString *strM  = [NSMutableString string];

for (int i = 0; i < 3; ++i) {

// 1.添加一个520

[strM appendString:subStr];

// 2.添加一个空格

[strM appendString:@" "];

}

[strM deleteCharactersInRange:NSMakeRange(strM.length - 1, 1)];

NSLog(@"strM = |%@|", strM);

时间: 2024-10-28 08:06:50

35-oc String的相关文章

Java基础知识强化35:String类之String类的转换功能

1. String类的转换功能 byte[] getBytes() char[] toCharArray() static String valueOf(char[] chs) static String valueOf(int i ) String toLowerCase() String toUpperCase() String concat(String str) 2. 案例: 1 package cn.itcast_05; 2 3 /* 4 * String的转换功能: 5 * byte

OC学习16——对象归档

转载自  OC学习篇之---归档和解挡 OC中的归档就是将对象写入到一个文件中,Java中的ObjectInputStream和ObjectOutputStream来进行操作的.当然在操作的这些对象都是需要实现一个接口:Serializable,同样的OC中操作的对象也是需要实现一个协议的,后面会说到. 一.已有类型的归档和解档 首先来看一个简单的例子: 1 // 2 // main.m 3 // 33_ObjectToFile 4 // 5 // Created by jiangwei on

Swift数独游戏优化&mdash;&mdash;C++与OC混编、plist自动生成

一.为什么要C++与OC混编? 在我之前的数独游戏中涉及到的数独游戏生成算法是参考的网上其他人的算法,是利用C++来实现的.   但是在我的例子中我发现这样存在一定的局限性: 1.我是利用Terminal的重定向功能来实现输出的,这样不能查看程序的实际运行状态信息. 2.C++编写的代码不能直接生成plist文件,而OC有直接的API可以生成plist文件.(当我前几天刚知道的时候我感觉之前用C++生成plist是有多勇敢)   二.如何进行C++与OC混编? 1.OC文件后缀改为"mm&quo

Java笔记(12):常见对象String

1.String类的构造方法 1 package cn.itcast_01; 2 3 /* 4 * 字符串:就是由多个字符组成的一串数据.也可以看成是一个字符数组. 5 * 通过查看API,我们可以知道 6 * A:字符串字面值"abc"也可以看成是一个字符串对象. 7 * B:字符串是常量,一旦被赋值,就不能被改变. 8 * 9 * 构造方法: 10 * public String():空构造 11 * public String(byte[] bytes):把字节数组转成字符串 1

Java String类的常用方法

String(byte[ ] bytes):通过byte数组构造字符串对象. String(char[ ] value):通过char数组构造字符串对象. String(Sting original):构造一个original的副本.即:拷贝一个original. String(StringBuffer buffer):通过StringBuffer数组构造字符串对象. byte[] b = {'a','b','c','d','e','f','g','h','i','j'}; char[] c =

【转载】Java中String类的方法及说明

转载自:http://www.cnblogs.com/YSO1983/archive/2009/12/07/1618564.html String : 字符串类型 一.构造函数     String(byte[ ] bytes):通过byte数组构造字符串对象.     String(char[ ] value):通过char数组构造字符串对象.     String(Sting original):构造一个original的副本.即:拷贝一个original.     String(Strin

mystring c++ 自己的string 封装

1 /************************************************************************* 2 > File Name: mystring.h 3 > Author: lukey 4 > Mail: [email protected] 5 > Created Time: Wed 17 Jun 2015 08:50:49 PM CST 6 ******************************************

String.Format,DateTime日期时间格式化集锦

DateTime dt = DateTime.Now;//2010年10月4日 17点05分 string str = ""; //str = string.Format("{0:y yy yyy yyyy}", dt); //10 10 2010 2010 //str = String.Format("{0:M MM MMM MMMM}", dt); //10 10 十月 十月 //str = String.Format("{0:d

swift 与 OC中的需要注意知识点

swift oc    *swift有命名空间概念,所谓命名空间即同一个命名空间中相互可以调用不用导入.不同命名空间中可以起相同的名字 swift项目就是一个命名空间 *判断是否是某个类 .协议.方法 *运行时获取类属性列表.属性名称.将C语言字符串转成oc string *基本数据类型,在OC中没有可选,swift中如果定义成可选,运行时同样获取不到,使用KVC会崩溃,所以基本数据类型需要赋初值 *private 的属性,使用运行时,同样获取不到属性,同样会让KVC崩溃 *运行时即运行时执行的

C++STL之String

本文直接转载,非原创!仅记录供自己学习之用. 出处:http://blog.csdn.net/y990041769/article/details/8763366 在学习c++STL中的string,在这里做个笔记,以供自己以后翻阅和初学者参考. 1:string对象的定义和初始化以及读写 string s1;      默认构造函数,s1为空串 string s2(s1);   将s2初始化为s1的一个副本 string s3("valuee");   将s3初始化一个字符串面值副本