文字列の各種変換。
全角→半角とか、
ひらがな→カタカナとか、
ローマ字→ひらがなとか。
普段あんまり必要としない機能というか、
ついぞ最近になってやりたいシーンが出てきて、
調べてみたら...。
NSStringには該当するメソッドはありませんが、
CFMutableStringに行き着きました。
で、CFStringTransform関数というのを使えばいいみたい。
定義を覗いてみると。
[CFStringTransform関数]
CF_EXPORT
Boolean CFStringTransform(CFMutableStringRef string, CFRange *range, CFStringRef transform, Boolean reverse);
[transform]
/* Transform identifiers for CFStringTransform()
*/
CF_EXPORT const CFStringRef kCFStringTransformStripCombiningMarks;
CF_EXPORT const CFStringRef kCFStringTransformToLatin;
CF_EXPORT const CFStringRef kCFStringTransformFullwidthHalfwidth;
CF_EXPORT const CFStringRef kCFStringTransformLatinKatakana;
CF_EXPORT const CFStringRef kCFStringTransformLatinHiragana;
CF_EXPORT const CFStringRef kCFStringTransformHiraganaKatakana;
CF_EXPORT const CFStringRef kCFStringTransformMandarinLatin;
CF_EXPORT const CFStringRef kCFStringTransformLatinHangul;
CF_EXPORT const CFStringRef kCFStringTransformLatinArabic;
CF_EXPORT const CFStringRef kCFStringTransformLatinHebrew;
CF_EXPORT const CFStringRef kCFStringTransformLatinThai;
CF_EXPORT const CFStringRef kCFStringTransformLatinCyrillic;
CF_EXPORT const CFStringRef kCFStringTransformLatinGreek;
CF_EXPORT const CFStringRef kCFStringTransformToXMLHex;
CF_EXPORT const CFStringRef kCFStringTransformToUnicodeName;
CF_EXPORT const CFStringRef kCFStringTransformStripDiacritics CF_AVAILABLE(10_5, 2_0);
CFStringTransform関数に対して、
定義されたtransformを指定してやると、
そのように変換してくれる。
再利用性と、
CFのコードをなるべく書かなくていいように、
必要そうな分をピックアップしてNSStringのカテゴリにしてみた。
[NSString+ConvertLetters.h]
@interface NSString (ConvertLetters)
- (NSString *)convertToFullwidth;
- (NSString *)convertToHalfwidth;
- (NSString *)convertKatakanaToHiragana;
- (NSString *)convertHiraganaToKatakana;
- (NSString *)convertHiraganaToRoman;
- (NSString *)convertRomanToHiragana;
- (NSString *)convertKatakanaToRoman;
- (NSString *)convertRomanToKatakana;
@end
- (NSString *)convertToFullwidth;
- (NSString *)convertToHalfwidth;
- (NSString *)convertKatakanaToHiragana;
- (NSString *)convertHiraganaToKatakana;
- (NSString *)convertHiraganaToRoman;
- (NSString *)convertRomanToHiragana;
- (NSString *)convertKatakanaToRoman;
- (NSString *)convertRomanToKatakana;
@end
[NSString+ConvertLetters.m]
- (NSString *)transformWith:(CFStringRef)transform reverse:(Boolean)reverse {
NSMutableString* retStr = [[NSMutableString alloc] initWithString:self];
CFStringTransform((__bridge CFMutableStringRef)retStr, NULL, transform, reverse);
return retStr;
}
- (NSString *)convertToFullwidth {
return [self transformWith:kCFStringTransformFullwidthHalfwidth
reverse:true];
}
・
・
・
NSMutableString* retStr = [[NSMutableString alloc] initWithString:self];
CFStringTransform((__bridge CFMutableStringRef)retStr, NULL, transform, reverse);
return retStr;
}
- (NSString *)convertToFullwidth {
return [self transformWith:kCFStringTransformFullwidthHalfwidth
reverse:true];
}
・
・
・
みたいな感じ。
それでは。
ちゃお☆
まこぴー。