//
// main.m
// 第二周第一天
//
// Created by qianfeng on 15/12/21.
// Copyright (c) 2015年 Li Yue. All rights reserved.
//
#import <Foundation/Foundation.h>
//字符串
//Nsstring 不可变字符串
//NSMutablestring 可变字符串
#if 0
int main(int argc, const char * argv[]) {
@autoreleasepool {
char str1[20]="hello";
char *str2="hello";
NSString *str3=@"hello";//表示其为OC对象,oc字符串是一个对象,其带有行为,即自带一些处理方法;
NSLog(@"%s %s %@",str1,str2,str3);
//在NSString内部也有字符存储的功能,同时,忽略C语言的尾0情况;
}
return 0;
}
#endif
#if 0
#include "String.h"
int main()
{
String *string1=[[String alloc]init];
[string1 description];
}
#endif
#if 0
int main()
{
//创建字符串对象
NSString *str1=[[NSString alloc]init];//不可变类字符串;init为空的不可变字符串
//对于不可变字符串来说 init方法无什么意义
NSLog(@"---%@",str1);
//NSString *str2=[[NSString alloc]initWithString:@"hello"];//用传入的字符串初始化新创建的字符串,可以直接做优化 str3;
// NSLog(@"%@",str2);//传入的字符串与输出的再内存地址上是不一样的;
NSString *str3=@"hello";
NSLog(@"%@",str3);
// NSLog(@"str3=%p str2=%p",str3,str2);//编译器优化的情况,地址情况不要去管,该操作不要做;
char str4[]="hello";
/*
常用的编码方式 UTF8 ['A' ASCII 65 一个字节] 之 3个字节 按你的需求提供字节数
这样可以节省内存,但是不方便字符的取出;不容易解析
unicode['A',给两个字节 0 65]固定的提供两个字节 浪费内存,但是方便提取解析;
苹果一般存储的编码形式绝大多数是UTF8
*/
NSString* str5=[[NSString alloc]initWithCString:str4 encoding:NSUTF8StringEncoding];
NSString *str6=[[NSString alloc]initWithUTF8String:str4];
NSString *str7 =[[NSString alloc]initWithFormat: @"hello %d",1000]; //(NSString *), ...可变参数列表
//以指定的格式来初始化字符串
//把很多数据全部拼到一个字符串
//将其他类型的数据转换成为字符串类型
//类方法创建对象
NSLog(@"%@",str7);
NSLog(@"%@ %@",str5,str6);
}
#endif
#if 0
int main()
{
@autoreleasepool {
NSString *str1=@"hello";//类方法创建
NSString *str2=[NSString stringWithString:str1];
NSLog(@"%@",str2);
/*类方法创建对象写法方便,alloc出来的东西也需要释放内存,但是oc
有自动管理机制ALC,平时写代码的时候我们是使用了alc的功能的
用类方法创建的不需要释放内存
但是,不知道其释放的时机,故只能做一个局部变量使用
*/
NSString *str3=[NSString stringWithUTF8String:"hello"];
NSString *str4=[NSString stringWithFormat:@"hello%@",str3];
NSLog(@"%@ %@",str3,str4);
}
return 0;
}
#endif
#if 0
int main()
{
/*
字符串的比较
*/
NSString *str1=@"ABCDE";
NSString *str2=@"ABCDE";
BOOL rec=[str1 isEqualToString:str2];
NSLog(@"%@",rec?@"相等":@"不相等");
NSComparisonResult result=[str1 compare:str2];
/*比较的结果typedef NS_ENUM(NSInteger, NSComparisonResult)
{
NSOrderedAscending = -1L, 升序 左边<右边
NSOrderedSame, 相等
NSOrderedDescending 降序 左边>右边
};
*/
if(result==NSOrderedAscending)
{
NSLog(@"左边比右边小");
}
}
#endif
#if 0
int main()
{
/*
搜索子字符串
*/
NSString *str1=@"hello world";
NSString *str2=@"llo";
NSRange range=[str1 rangeOfString:str2];
//NSUInteger location 位置
// NSUInteger length; 长度
NSLog(@"range.location=%ld rang.length=%ld",range.length,range.location);
//判断是否出现过的两种方法,
//1 判断length是否为0
//2 判断 location
//enum {NSNotFound = NSIntegerMax};这个数很大
//NOTICE 返回的是第一次出现的范围,也就是只返回第一次比对成功的
if(range.location!=NSNotFound)
{
NSLog(@"range.location=%ld rang.length=%ld",range.length,range.location);
}
//NSRange range1={5,8};
range=[str1 rangeOfString:str2 options:NSBackwardsSearch];
range=[str1 rangeOfString:str2 options:NSLiteralSearch];
range=[str1 rangeOfString:str2 options:NSLiteralSearch range:/*range1*/NSMakeRange(5, 8)];//指定范围来搜索,注意搜索出来的范围针对原字符串
}
#endif
int main()
{
/*
抽取子字符串
*/
NSString *str1=@"sai li ya";
str1=[str1 substringFromIndex:3];//下标开始的位置开始抽取 注意:下标开始计数的位置是0
//方法 创建新的一个字符串,然后将其指向指向新的字符串
NSLog(@"%@",str1);
str1=[str1 substringToIndex:6];
NSLog(@"%@",str1);
//从头开始,直至下标对对应的字符,但是不包含
str1=[str1 substringWithRange:NSMakeRange(4, 2)];
//前面数字为开始抽取的下标,后面数字为抽取的长度
//指定范围内的抽取
}