NSString(QMUI)
@interface NSString (QMUI)
/// 将字符串按一个一个字符拆成数组,类似 JavaScript 里的 split(""),如果多个空格,则每个空格也会当成一个 item
@property(nullable, readonly, copy) NSArray<NSString *> *qmui_toArray;
/// 将字符串按一个一个字符拆成数组,类似 JavaScript 里的 split(""),但会自动过滤掉空白字符
@property(nullable, readonly, copy) NSArray<NSString *> *qmui_toTrimmedArray;
/// 去掉头尾的空白字符
@property(readonly, copy) NSString *qmui_trim;
/// 去掉整段文字内的所有空白字符(包括换行符)
@property(readonly, copy) NSString *qmui_trimAllWhiteSpace;
/// 将文字中的换行符替换为空格
@property(readonly, copy) NSString *qmui_trimLineBreakCharacter;
/// 把该字符串转换为对应的 md5
@property(readonly, copy) NSString *qmui_md5;
/// 返回一个符合 query value 要求的编码后的字符串,例如&、#、=等字符均会被变为 %xxx 的编码
/// @see `NSCharacterSet (QMUI) qmui_URLUserInputQueryAllowedCharacterSet`
@property(nullable, readonly, copy) NSString *qmui_stringByEncodingUserInputQuery;
/// 把当前文本的第一个字符改为大写,其他的字符保持不变,例如 backgroundView.qmui_capitalizedString -> BackgroundView(系统的 capitalizedString 会变成 Backgroundview)
@property(nullable, readonly, copy) NSString *qmui_capitalizedString;
/**
* 用正则表达式匹配的方式去除字符串里一些特殊字符,避免UI上的展示问题
* @link http://www.croton.su/en/uniblock/Diacriticals.html @/link
*/
@property(nullable, readonly, copy) NSString *qmui_removeMagicalChar;
/**
* 按照中文 2 个字符、英文 1 个字符的方式来计算文本长度
*/
@property(readonly) 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 正则表达式
@return 匹配到的第一个结果,如果没有匹配成功则返回 nil
*/
- (NSString *)qmui_stringMatchedByPattern:(NSString *)pattern;
/**
* 用正则表达式匹配字符串并将其替换为指定的另一个字符串,大小写不敏感
* @param pattern 正则表达式
* @param replacement 要替换为的字符串
* @return 最终替换后的完整字符串,如果正则表达式匹配不成功则返回原字符串
*/
- (NSString *)qmui_stringByReplacingPattern:(NSString *)pattern withString:(NSString *)replacement;
/// 把某个十进制数字转换成十六进制的数字的字符串,例如“10”->“A”
+ (NSString *)qmui_hexStringWithInteger:(NSInteger)integer;
/// 把参数列表拼接成一个字符串并返回,相当于用另一种语法来代替 [NSString stringWithFormat:]
+ (NSString *)qmui_stringByConcat:(id)firstArgv, ...;
/**
* 将秒数转换为同时包含分钟和秒数的格式的字符串,例如 100->"01:40"
*/
+ (NSString *)qmui_timeStringWithMinsAndSecsFromSecs:(double)seconds;
@end
Undocumented
-
将字符串按一个一个字符拆成数组,类似 JavaScript 里的 split(“”),如果多个空格,则每个空格也会当成一个 item
Declaration
Objective-C
@property (copy, readonly, nullable) NSArray<NSString *> *qmui_toArray;
Swift
var qmui_toArray: [String]? { get }
-
将字符串按一个一个字符拆成数组,类似 JavaScript 里的 split(“”),但会自动过滤掉空白字符
Declaration
Objective-C
@property (copy, readonly, nullable) NSArray<NSString *> *qmui_toTrimmedArray;
Swift
var qmui_toTrimmedArray: [String]? { get }
-
去掉头尾的空白字符
Declaration
Objective-C
@property (copy, readonly) NSString *_Nonnull qmui_trim;
Swift
var qmui_trim: String { get }
-
去掉整段文字内的所有空白字符(包括换行符)
Declaration
Objective-C
@property (copy, readonly) NSString *_Nonnull qmui_trimAllWhiteSpace;
Swift
var qmui_trimAllWhiteSpace: String { get }
-
将文字中的换行符替换为空格
Declaration
Objective-C
@property (copy, readonly) NSString *_Nonnull qmui_trimLineBreakCharacter;
Swift
var qmui_trimLineBreakCharacter: String { get }
-
把该字符串转换为对应的 md5
Declaration
Objective-C
@property (copy, readonly) NSString *_Nonnull qmui_md5;
Swift
var qmui_md5: String { get }
-
返回一个符合 query value 要求的编码后的字符串,例如&、#、=等字符均会被变为 %xxx 的编码
See
NSCharacterSet (QMUI) qmui_URLUserInputQueryAllowedCharacterSet
Declaration
Objective-C
@property (copy, readonly, nullable) NSString *qmui_stringByEncodingUserInputQuery;
Swift
var qmui_stringByEncodingUserInputQuery: String? { get }
-
把当前文本的第一个字符改为大写,其他的字符保持不变,例如 backgroundView.qmui_capitalizedString -> BackgroundView(系统的 capitalizedString 会变成 Backgroundview)
Declaration
Objective-C
@property (copy, readonly, nullable) NSString *qmui_capitalizedString;
Swift
var qmui_capitalized: String? { get }
-
用正则表达式匹配的方式去除字符串里一些特殊字符,避免UI上的展示问题 @link http://www.croton.su/en/uniblock/Diacriticals.html @/link
Declaration
Objective-C
@property (copy, readonly, nullable) NSString *qmui_removeMagicalChar;
Swift
var qmui_removeMagicalChar: String? { get }
-
按照中文 2 个字符、英文 1 个字符的方式来计算文本长度
Declaration
Objective-C
@property (readonly) NSUInteger qmui_lengthWhenCountingNonASCIICharacterAsTwo;
Swift
var qmui_lengthWhenCountingNonASCIICharacterAsTwo: UInt { get }
-
将字符串从指定的 index 开始裁剪到结尾,裁剪时会避免将 emoji 等 “character sequences” 拆散(一个 emoji 表情占用1-4个长度的字符)。
例如对于字符串“😊😞”,它的长度为4,若调用 [string qmui_substringAvoidBreakingUpCharacterSequencesFromIndex:1],将返回“😊😞”。 若调用系统的 [string substringFromIndex:1],将返回“?😞”。(?表示乱码,因为第一个 emoji 表情被从中间裁开了)。
Declaration
Objective-C
- (nonnull NSString *) qmui_substringAvoidBreakingUpCharacterSequencesFromIndex:(NSUInteger)index lessValue:(BOOL)lessValue countingNonASCIICharacterAsTwo: (BOOL)countingNonASCIICharacterAsTwo;
Swift
func qmui_substringAvoidBreakingUpCharacterSequences(from index: UInt, lessValue: Bool, countingNonASCIICharacterAsTwo: Bool) -> String
Parameters
index
要从哪个 index 开始裁剪文字
lessValue
要按小的长度取,还是按大的长度取
countingNonASCIICharacterAsTwo
是否按照 英文 1 个字符长度、中文 2 个字符长度的方式来裁剪
Return Value
裁剪完的字符
-
相当于
qmui_substringAvoidBreakingUpCharacterSequencesFromIndex: lessValue:YES
countingNonASCIICharacterAsTwo:NOSee
qmui_substringAvoidBreakingUpCharacterSequencesFromIndex:lessValue:countingNonASCIICharacterAsTwo:Declaration
Objective-C
- (nonnull NSString *)qmui_substringAvoidBreakingUpCharacterSequencesFromIndex: (NSUInteger)index;
Swift
func qmui_substringAvoidBreakingUpCharacterSequences(from index: UInt) -> String
-
将字符串从开头裁剪到指定的 index,裁剪时会避免将 emoji 等 “character sequences” 拆散(一个 emoji 表情占用1-4个长度的字符)。
例如对于字符串“😊😞”,它的长度为4,若调用 [string qmui_substringAvoidBreakingUpCharacterSequencesToIndex:1 lessValue:NO countingNonASCIICharacterAsTwo:NO],将返回“😊”。 若调用系统的 [string substringToIndex:1],将返回“?”。(?表示乱码,因为第一个 emoji 表情被从中间裁开了)。
Declaration
Objective-C
- (nonnull NSString *) qmui_substringAvoidBreakingUpCharacterSequencesToIndex:(NSUInteger)index lessValue:(BOOL)lessValue countingNonASCIICharacterAsTwo: (BOOL)countingNonASCIICharacterAsTwo;
Swift
func qmui_substringAvoidBreakingUpCharacterSequences(to index: UInt, lessValue: Bool, countingNonASCIICharacterAsTwo: Bool) -> String
Parameters
index
要裁剪到哪个 index
lessValue
裁剪时若遇到“character sequences”,是向下取整还是向上取整。
countingNonASCIICharacterAsTwo
是否按照 英文 1 个字符长度、中文 2 个字符长度的方式来裁剪
Return Value
裁剪完的字符
-
相当于
qmui_substringAvoidBreakingUpCharacterSequencesToIndex:lessValue:YES
countingNonASCIICharacterAsTwo:NOSee
qmui_substringAvoidBreakingUpCharacterSequencesToIndex:lessValue:countingNonASCIICharacterAsTwo:Declaration
Objective-C
- (nonnull NSString *)qmui_substringAvoidBreakingUpCharacterSequencesToIndex: (NSUInteger)index;
Swift
func qmui_substringAvoidBreakingUpCharacterSequences(to index: UInt) -> String
-
将字符串里指定 range 的子字符串裁剪出来,会避免将 emoji 等 “character sequences” 拆散(一个 emoji 表情占用1-4个长度的字符)。
例如对于字符串“😊😞”,它的长度为4,在 lessValue 模式下,裁剪 (0, 1) 得到的是空字符串,裁剪 (0, 2) 得到的是“😊”。 在非 lessValue 模式下,裁剪 (0, 1) 或 (0, 2),得到的都是“😊”。
Declaration
Objective-C
- (nonnull NSString *) qmui_substringAvoidBreakingUpCharacterSequencesWithRange:(NSRange)range lessValue:(BOOL)lessValue countingNonASCIICharacterAsTwo: (BOOL)countingNonASCIICharacterAsTwo;
Swift
func qmui_substringAvoidBreakingUpCharacterSequences(with range: NSRange, lessValue: Bool, countingNonASCIICharacterAsTwo: Bool) -> String
Parameters
range
要裁剪的文字位置
lessValue
裁剪时若遇到“character sequences”,是向下取整还是向上取整。
countingNonASCIICharacterAsTwo
是否按照 英文 1 个字符长度、中文 2 个字符长度的方式来裁剪
Return Value
裁剪完的字符
-
相当于
qmui_substringAvoidBreakingUpCharacterSequencesWithRange:lessValue:YES
countingNonASCIICharacterAsTwo:NOSee
qmui_substringAvoidBreakingUpCharacterSequencesWithRange:lessValue:countingNonASCIICharacterAsTwo:Declaration
Objective-C
- (nonnull NSString *)qmui_substringAvoidBreakingUpCharacterSequencesWithRange: (NSRange)range;
Swift
func qmui_substringAvoidBreakingUpCharacterSequences(with range: NSRange) -> String
-
移除指定位置的字符,可兼容emoji表情的情况(一个emoji表情占1-4个length)
Declaration
Objective-C
- (nonnull NSString *)qmui_stringByRemoveCharacterAtIndex:(NSUInteger)index;
Swift
func qmui_stringByRemoveCharacter(at index: UInt) -> String
Parameters
index
要删除的位置
-
移除最后一个字符,可兼容emoji表情的情况(一个emoji表情占1-4个length)
See
qmui_stringByRemoveCharacterAtIndex:
Declaration
Objective-C
- (nonnull NSString *)qmui_stringByRemoveLastCharacter;
Swift
func qmui_stringByRemoveLastCharacter() -> String
-
用正则表达式匹配字符串,将匹配到的第一个结果返回,大小写不敏感
Declaration
Objective-C
- (nonnull NSString *)qmui_stringMatchedByPattern:(nonnull NSString *)pattern;
Swift
func qmui_stringMatched(byPattern pattern: String) -> String
Parameters
pattern
正则表达式
Return Value
匹配到的第一个结果,如果没有匹配成功则返回 nil
-
用正则表达式匹配字符串并将其替换为指定的另一个字符串,大小写不敏感
Declaration
Objective-C
- (nonnull NSString *)qmui_stringByReplacingPattern:(nonnull NSString *)pattern withString: (nonnull NSString *)replacement;
Swift
func qmui_string(byReplacingPattern pattern: String, with replacement: String) -> String
Parameters
pattern
正则表达式
replacement
要替换为的字符串
Return Value
最终替换后的完整字符串,如果正则表达式匹配不成功则返回原字符串
-
把某个十进制数字转换成十六进制的数字的字符串,例如“10”->“A”
Declaration
Objective-C
+ (nonnull NSString *)qmui_hexStringWithInteger:(NSInteger)integer;
Swift
class func qmui_hexString(with integer: Int) -> String
-
把参数列表拼接成一个字符串并返回,相当于用另一种语法来代替 [NSString stringWithFormat:]
Declaration
Objective-C
+ (nonnull NSString *)qmui_stringByConcat:(nonnull id)firstArgv, ...;
-
将秒数转换为同时包含分钟和秒数的格式的字符串,例如 100->“01:40”
Declaration
Objective-C
+ (nonnull NSString *)qmui_timeStringWithMinsAndSecsFromSecs:(double)seconds;
Swift
class func qmui_timeWithMinsAndSecs(fromSecs seconds: Double) -> String