字符串的使用

NSString的创建方式

指针指向的对象地址相同,指针的地址不同
第一种创建方式 常量区中的字符串只要内容一致, 不会重复创建

 NSString *str1 = @"lion";
 NSString *str2 = @"lion";

第二种创建方式,堆区中得字符串哪怕内容一致, 也会重复创建

 NSString *str1 = [NSString stringWithFormat:@"lion"];
 NSString *str2 = [NSString stringWithFormat:@"lion"];

指针常量 常量指针

指针常量,地址和值都不可更改
NSString *const str = @"xxxxx”;

常量指针,地址可更改

const NSString * str2 = @"明月几时有";

NSString const * str3 = @"唧唧复唧唧”;

字符串操作

字符串的比较

NSString的比较
- (BOOL)isEqualToString:(NSString *)aString;
地址是否一样
 str1 == str2
比较字符串大小
- (NSComparisonResult)compare:(NSString *)string;
忽略大小写进行比较
- (NSComparisonResult)compare:(NSString *)string;
比较两个字符串大小
[deal.publish_date compare:now]==NSOrderedAscending;

字符串搜索

    是否以aString开头
- (BOOL)hasPrefix:(NSString *)aString;
    是否以aString结尾
- (BOOL)hasSuffix:(NSString *)aString;

用来检查字符串内容中是否包含了aString,如果包含, 就返回aString的范围,如果不包含, NSRange的location为NSNotFound, length为0

- (NSRange)rangeOfString:(NSString *)aString;
   返回 index 对应的位置的字符
- (unichar)characterAtIndex:(NSUInteger)index;
   字符串是否包含字符字符串
- (BOOL)containsString:(NSString *)str

** 字符串的位置**

NSInteger dotloc =[self.currentPriceLabel.text rangeOfString:@"."].location;
if (dotloc!=NSNotFound) {NSLog(@"没有找到");} 

最后一个“<”符号的位置
NSRange lastRange = [source rangeOfString:@"<" options:NSBackwardsSearch];

字符串的截取

   - (NSString *)substringFromIndex:(NSUInteger)from;
   - (NSString *)substringToIndex:(NSUInteger)to;
   - (NSString *)substringWithRange:(NSRange)range;

字符串的替换

- (NSString *)stringByReplacingOccurrencesOfString:(NSString *)target withString:(NSString *)replacement;

去除首尾
- (NSString *)stringByTrimmingCharactersInSet:(NSCharacterSet *)set;
去除首尾的空格
NSString *newStr = [str stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];

字符串的转换

转为基本数据类型
- (int)intValue;
转成对象类型

@()  快速把int转化为NSNumber对象类型 NSNumber
@[]  快速声明数组 NSArray
@{}字典类型 NSDiction
@YES @1 @1.1 @=(变量);
转为C语言中的字符串
- (char *)UTF8String;
const char *cStr = [str UTF8String];
NSString—>char *
`const char *c=[str cStringUsingEncoding:NSUTF8StringEncoding];`
转为对象类型
NSString *str = [NSString stringWithUTF8String:cStr];

NSString的大小写转换

    全部字符转为大写字母  
  - (NSString *)uppercaseString;
    全部字符转为小写字母
    - (NSString *)lowercaseString
    首字母变大写,其他字母都变小写
    - (NSString *)capitalizedString

NSString—>NSData
NSData *data2=[str2 dataUsingEncoding:NSUTF8StringEncoding];

中文转码

可以解决url含有中文的问题

   iOS9之前
`[urlStr stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];`

   iOS9之后
`[path stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLPathAllowedCharacterSet]]`

关于文档的操作

字符串与路径

获取到沙河路劲
NSString *path2 = NSHomeDirectory();
获取到library的路径
NSString *path = [NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES) lastObject];

是否为绝对路劲其实就是判断是否以/开头

- (BOOL)isAbsolutePath;
- (NSString *)lastPathComponent;
- (NSString *)stringByDeletingLastPathComponent;

- (NSString *)stringByAppendingPathComponent:(NSString *)str;(也可以使用stringByAppendingString:或者stringByAppendingFormat:拼接字符串内容)
**NSString 与 文件拓展名**
- (void)pathExtension
- (NSString *)stringByDeletingPathExtension;

在尾部添加一个拓展名

- (NSString *)stringByAppendingPathExtension:(NSString *)str;
- (void)stringByAppendingPathExtension

将一个字符串分隔成多个字符串
- (NSArray *)componentsSeparatedByString:(NSString *)separator
NSString的读写

读取:错误error返回0
    NSError *error = nil;
    NSString *str = [NSString stringWithContentsOfFile:@"/Users/LJH/Desktop/Lion.txt" encoding:NSUTF8StringEncoding error:&error];`
写入:重复写入同一个文件会覆盖上一个文件

    BOOL flag = [str writeToFile:@"/Users/LJH/Desktop/Lion.txt" atomically:YES encoding:NSUTF8StringEncoding error:nil];

NSMutableString常用方法

[strM insertString:@"http://" atIndex:0]
[mstr appendFormat:@"你好%@",@"hare"];
[strM appendString:@"Lion"];
 
- (void)appendFormat:(NSString *)format;
NSMutableString *strM = [NSMutableString stringWithString:@"http://www.baidu.com"];

[path deleteCharactersInRange:range];`
改
- (void)replaceCharactersInRange:(NSRange)range withString:(NSString *)aString;
NSRange range = [strM rangeOfString:@"lion"];

NSMutableAttributedString

3.1 创建

NSMutableAttributedString *attributedTitleText = [[NSMutableAttributedString alloc]initWithString:titleText];

根据附件创建一个属性文字

NSAttributedString *imageStr = [NSAttributedString attributedStringWithAttachment:attch];

** 属性**

属性的文字
self.attributedText
.string

** 方法**

添加属性:根据key-value

- (void)addAttribute:(NSString *)name value:(id)value range:(NSRange)range;
// 添加属性:根据字典
- (void)addAttributes:(NSDictionary<NSString *, id> *)attrs range:(NSRange)range;
// 设置range范围的属性,会覆盖之前的
- (void)setAttributes:(nullable NSDictionary<NSString *, id> *)attrs range:(NSRange)range;

根据一个key读取一个对象

StatusAttributedTextRangesModel *textRangesModel = [self.attributedText attribute:StatusAttributedTextRangesModelKey atIndex:0 effectiveRange:NULL];

截取

[self.attributedText attributedSubstringFromRange:range]

获取改属性对应的对象
[text attribute:YYTextBindingAttributeName atIndex:range.location effectiveRange:NULL]
 遍历
[self.attributedText enumerateAttributesInRange:NSMakeRange(0, self.attributedText.length) options:NSAttributedStringEnumerationReverse usingBlock:^(NSDictionary *attrs, NSRange range, BOOL *stop) {

  EmotionTextAttachment *attch = attrs[@"NSAttachment"];

}];

NSTextAttachment附件

** 创建**
NSTextAttachment *attch = [[NSTextAttachment alloc] init];

** 属性**
将一个图片,转成附件
attch.image = [UIImage imageNamed:emotion.png];

** 设置附件的bounds**
attch.bounds = CGRectMake(0, -4, attchWH, attchWH);

3.5 文字字典

 背景颜色
NSBackgroundColorAttributeName
 文字颜色
NSForegroundColorAttributeName
字体
NSFontAttributeName
 是否带有下划线
attributes[NSUnderlineStyleAttributeName] = @YES;
文字颜色
normalAttrs[UITextAttributeTextColor]
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,393评论 5 467
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,790评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,391评论 0 330
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,703评论 1 270
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,613评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,003评论 1 275
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,507评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,158评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,300评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,256评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,274评论 1 328
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,984评论 3 316
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,569评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,662评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,899评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,268评论 2 345
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,840评论 2 339

推荐阅读更多精彩内容