原文http://www.olinone.com/?p=131
最近在做字符串转拼音的速度优化,现分享给大家,各位朋友有什么想法可以给我留言,谢谢!
第一阶段:git开源工具:PinYin4Objc
第二阶段:网友推荐方法
1
2
3
4
5
6
|
-
(
NSString
*
)
transformToPinyin
{
NSMutableString
*mutableString
=
[
NSMutableString
stringWithString
:self
]
;
CFStringTransform
(
(
CFMutableStringRef
)
mutableString
,
NULL
,
kCFStringTransformToLatin
,
false
)
;
CFStringTransform
(
(
CFMutableStringRef
)
mutableString
,
NULL
,
kCFStringTransformStripDiacritics
,
false
)
;
return
mutableString
;
}
|
第三阶段: 正则表达式优先过滤英文数字特殊字符等
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
-
(
NSString
*
)
transformToPinyin
{
NSMutableString
*mutableString
=
[
NSMutableString
stringWithString
:self
]
;
BOOL
isNeedTransform
=
!
[
self
isAllEngNumAndSpecialSign
]
;
if
(
isNeedTransform
)
{
CFStringTransform
(
(
CFMutableStringRef
)
mutableString
,
NULL
,
kCFStringTransformToLatin
,
false
)
;
CFStringTransform
(
(
CFMutableStringRef
)
mutableString
,
NULL
,
kCFStringTransformStripDiacritics
,
false
)
;
}
return
mutableString
;
}
-
(
BOOL
)
isAllEngNumAndSpecialSign
{
NSString
*regularString
=
@"^[A-Za-z0-9\\p{Z}\\p{P}]+$"
;
NSPredicate
*predicate
=
[
NSPredicate
predicateWithFormat
:
@"SELF MATCHES %@"
,
regularString
]
;
return
[
predicate
evaluateWithObject
:self
]
;
}
|
第四阶段:参考http://nshipster.com/cfstringtransform/
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
-
(
NSString
*
)
transformToPinyin
{
NSMutableString
*mutableString
=
[
NSMutableString
stringWithString
:self
]
;
BOOL
isNeedTransform
=
!
[
self
isAllEngNumAndSpecialSign
]
;
if
(
isNeedTransform
)
{
CFStringTransform
(
(
CFMutableStringRef
)
mutableString
,
NULL
,
kCFStringTransformToLatin
,
false
)
;
CFStringTransform
(
(
CFMutableStringRef
)
mutableString
,
NULL
,
kCFStringTransformStripCombiningMarks
,
false
)
;
}
return
mutableString
;
}
-
(
BOOL
)
isAllEngNumAndSpecialSign
{
NSString
*regularString
=
@"^[A-Za-z0-9\\p{Z}\\p{P}]+$"
;
NSPredicate
*predicate
=
[
NSPredicate
predicateWithFormat
:
@"SELF MATCHES %@"
,
regularString
]
;
return
[
predicate
evaluateWithObject
:self
]
;
}
|
第五阶段:终极优化版
1
2
3
4
5
6
|
-
(
NSString
*
)
transformToPinyin
{
NSMutableString
*mutableString
=
[
NSMutableString
stringWithString
:self
]
;
CFStringTransform
(
(
CFMutableStringRef
)
mutableString
,
NULL
,
kCFStringTransformToLatin
,
false
)
;
mutableString
=
(
NSMutableString
*
)
[
mutableString
stringByFoldingWithOptions
:NSDiacriticInsensitiveSearch
locale
:
[
NSLocale
currentLocale
]
]
;
return
mutableString
;
}
|
Demo移步https://github.com/panghaijiao/PHJTransformPinyinDemo,喜欢请点赞,感谢你的来访!