35-oc String

Posted wc&Home

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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);

以上是关于35-oc String的主要内容,如果未能解决你的问题,请参考以下文章

Java Stringstring[]List初始化方法

java StringString.concat和StringBuilder性能对比

Cpp读写文件CString转StringString转CString

实用类StringString类方法的应用案例:查找判断指定字符出现的次数和位置

字符串去重

JAVA字符串处理工具类