forked from Tencent/QMUI_iOS
-
Notifications
You must be signed in to change notification settings - Fork 0
/
NSString+QMUI.h
138 lines (113 loc) · 6.59 KB
/
NSString+QMUI.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
//
// NSString+QMUI.h
// qmui
//
// Created by ZhoonChen on 15/7/20.
// Copyright (c) 2015年 QMUI Team. All rights reserved.
//
#import <Foundation/Foundation.h>
#import <CoreGraphics/CGBase.h>
@interface NSString (QMUI)
/// 将字符串按一个一个字符拆成数组,类似 JavaScript 里的 split(""),如果多个空格,则每个空格也会当成一个 item
- (NSArray<NSString *> *)qmui_toArray;
/// 将字符串按一个一个字符拆成数组,类似 JavaScript 里的 split(""),但会自动过滤掉空白字符
- (NSArray<NSString *> *)qmui_toTrimmedArray;
/// 去掉头尾的空白字符
- (NSString *)qmui_trim;
/// 去掉整段文字内的所有空白字符(包括换行符)
- (NSString *)qmui_trimAllWhiteSpace;
/// 将文字中的换行符替换为空格
- (NSString *)qmui_trimLineBreakCharacter;
/// 把该字符串转换为对应的 md5
- (NSString *)qmui_md5;
/// 把某个十进制数字转换成十六进制的数字的字符串,例如“10”->“A”
+ (NSString *)qmui_hexStringWithInteger:(NSInteger)integer;
/// 把参数列表拼接成一个字符串并返回,相当于用另一种语法来代替 [NSString stringWithFormat:]
+ (NSString *)qmui_stringByConcat:(id)firstArgv, ...;
/**
* 将秒数转换为同时包含分钟和秒数的格式的字符串,例如 100->"01:40"
*/
+ (NSString *)qmui_timeStringWithMinsAndSecsFromSecs:(double)seconds;
/**
* 用正则表达式匹配的方式去除字符串里一些特殊字符,避免UI上的展示问题
* @link http://www.croton.su/en/uniblock/Diacriticals.html @/link
*/
- (NSString *)qmui_removeMagicalChar;
/**
* 按照中文 2 个字符、英文 1 个字符的方式来计算文本长度
*/
- (NSUInteger)qmui_lengthWhenCountingNonASCIICharacterAsTwo;
/**
* 将字符串从指定的 index 开始裁剪到结尾,裁剪时会避免将 emoji 等 "character sequences" 拆散(一个 emoji 表情占用1-4个长度的字符)。
*
* 例如对于字符串“😊😞”,它的长度为4,若调用 [string qmui_substringAvoidBreakingUpCharacterSequencesFromIndex:1],将返回“😊😞”。
* 若调用系统的 [string substringFromIndex:1],将返回“?😞”。(?表示乱码,因为第一个 emoji 表情被从中间裁开了)。
*
* @param index 要从哪个 index 开始裁剪文字
* @param lessValue 要按小的长度取,还是按大的长度取
* @param countingNonASCIICharacterAsTwo 是否按照 英文 1 个字符长度、中文 2 个字符长度的方式来裁剪
* @return 裁剪完的字符
*/
- (NSString *)qmui_substringAvoidBreakingUpCharacterSequencesFromIndex:(NSUInteger)index lessValue:(BOOL)lessValue countingNonASCIICharacterAsTwo:(BOOL)countingNonASCIICharacterAsTwo;
/**
* 相当于 `qmui_substringAvoidBreakingUpCharacterSequencesFromIndex: lessValue:YES` countingNonASCIICharacterAsTwo:NO
* @see qmui_substringAvoidBreakingUpCharacterSequencesFromIndex:lessValue:countingNonASCIICharacterAsTwo:
*/
- (NSString *)qmui_substringAvoidBreakingUpCharacterSequencesFromIndex:(NSUInteger)index;
/**
* 将字符串从开头裁剪到指定的 index,裁剪时会避免将 emoji 等 "character sequences" 拆散(一个 emoji 表情占用1-4个长度的字符)。
*
* 例如对于字符串“😊😞”,它的长度为4,若调用 [string qmui_substringAvoidBreakingUpCharacterSequencesToIndex:1 lessValue:NO countingNonASCIICharacterAsTwo:NO],将返回“😊”。
* 若调用系统的 [string substringToIndex:1],将返回“?”。(?表示乱码,因为第一个 emoji 表情被从中间裁开了)。
*
* @param index 要裁剪到哪个 index
* @param lessValue 裁剪时若遇到“character sequences”,是向下取整还是向上取整。
* @param countingNonASCIICharacterAsTwo 是否按照 英文 1 个字符长度、中文 2 个字符长度的方式来裁剪
* @return 裁剪完的字符
*/
- (NSString *)qmui_substringAvoidBreakingUpCharacterSequencesToIndex:(NSUInteger)index lessValue:(BOOL)lessValue countingNonASCIICharacterAsTwo:(BOOL)countingNonASCIICharacterAsTwo;
/**
* 相当于 `qmui_substringAvoidBreakingUpCharacterSequencesToIndex:lessValue:YES` countingNonASCIICharacterAsTwo:NO
* @see qmui_substringAvoidBreakingUpCharacterSequencesToIndex:lessValue:countingNonASCIICharacterAsTwo:
*/
- (NSString *)qmui_substringAvoidBreakingUpCharacterSequencesToIndex:(NSUInteger)index;
/**
* 将字符串里指定 range 的子字符串裁剪出来,会避免将 emoji 等 "character sequences" 拆散(一个 emoji 表情占用1-4个长度的字符)。
*
* 例如对于字符串“😊😞”,它的长度为4,在 lessValue 模式下,裁剪 (0, 1) 得到的是空字符串,裁剪 (0, 2) 得到的是“😊”。
* 在非 lessValue 模式下,裁剪 (0, 1) 或 (0, 2),得到的都是“😊”。
*
* @param range 要裁剪的文字位置
* @param lessValue 裁剪时若遇到“character sequences”,是向下取整还是向上取整。
* @param countingNonASCIICharacterAsTwo 是否按照 英文 1 个字符长度、中文 2 个字符长度的方式来裁剪
* @return 裁剪完的字符
*/
- (NSString *)qmui_substringAvoidBreakingUpCharacterSequencesWithRange:(NSRange)range lessValue:(BOOL)lessValue countingNonASCIICharacterAsTwo:(BOOL)countingNonASCIICharacterAsTwo;
/**
* 相当于 `qmui_substringAvoidBreakingUpCharacterSequencesWithRange:lessValue:YES` countingNonASCIICharacterAsTwo:NO
* @see qmui_substringAvoidBreakingUpCharacterSequencesWithRange:lessValue:countingNonASCIICharacterAsTwo:
*/
- (NSString *)qmui_substringAvoidBreakingUpCharacterSequencesWithRange:(NSRange)range;
/**
* 移除指定位置的字符,可兼容emoji表情的情况(一个emoji表情占1-4个length)
* @param index 要删除的位置
*/
- (NSString *)qmui_stringByRemoveCharacterAtIndex:(NSUInteger)index;
/**
* 移除最后一个字符,可兼容emoji表情的情况(一个emoji表情占1-4个length)
* @see `qmui_stringByRemoveCharacterAtIndex:`
*/
- (NSString *)qmui_stringByRemoveLastCharacter;
/**
* 用正则表达式匹配字符串并将其替换为指定的另一个字符串
* @param pattern 正则表达式
* @param replacement 要替换为的字符串
* @return 最终替换后的完整字符串,如果正则表达式匹配不成功则返回原字符串
*/
- (NSString *)qmui_stringByReplacingPattern:(NSString *)pattern withString:(NSString *)replacement;
@end
@interface NSString (QMUI_StringFormat)
+ (instancetype)qmui_stringWithNSInteger:(NSInteger)integerValue;
+ (instancetype)qmui_stringWithCGFloat:(CGFloat)floatValue;
+ (instancetype)qmui_stringWithCGFloat:(CGFloat)floatValue decimal:(NSUInteger)decimal;
@end