★ 指定文字列を置換する
let str = "あいうeo"
str.stringByReplacingOccurrencesOfString("eo", withString: "えお")
// -> あいうえお
★ 任意の文字列を検索してrangeを取得する
var str = "abcdefghi"
// 任意の文字列ある位置を取得する、取得できない場合はnilを返す
if let range = str.range(of: "cde") {
let low = range.lowerBound
//=> 2
let upper = range.upperBound
//=> 5
let s = str.replacingCharacters(in: range, with: "CDE")
//=> "abCDEfghi"
}
★ 漢字を仮名に変換する
参考URL: 読み仮名を得る
import Foundation
func chagedToKana(kanjiText: String) -> String {
let inputText = kanjiText as NSString
let outputText = NSMutableString()
var range: CFRange = CFRangeMake(0, inputText.length)
let locale: CFLocale = CFLocaleCopyCurrent()
/* トークナイザーを作成 */
let tokenizer: CFStringTokenizer = CFStringTokenizerCreate(kCFAllocatorDefault,
inputText as CFString,
range,
kCFStringTokenizerUnitWordBoundary,
locale)
/* 最初の位置に */
var tokenType: CFStringTokenizerTokenType = CFStringTokenizerGoToTokenAtIndex(tokenizer, 0)
/* 形態素解析 */
while tokenType.rawValue != 0 {
range = CFStringTokenizerGetCurrentTokenRange(tokenizer)
/* ローマ字を得る */
let latin: CFTypeRef = CFStringTokenizerCopyCurrentTokenAttribute(tokenizer, kCFStringTokenizerAttributeLatinTranscription)
let romaji = latin as! NSString
/* 平仮名に変換 */
let furigana: NSMutableString = romaji.mutableCopy() as! NSMutableString
CFStringTransform(furigana as CFMutableString, nil, kCFStringTransformLatinHiragana, false)
outputText.append(furigana as String)
tokenType = CFStringTokenizerAdvanceToNextToken(tokenizer)
}
return outputText as String
}
// --------- 使い方 ---------
let kana = chagedToKana(kanjiText: "田中一郎")
//=> "たなかいちろう"
★ 漢字をカタカナに変換する
import Foundation
func chagedToKatakana(kanjiText: String) -> String {
let inputText = kanjiText as NSString
let outputText = NSMutableString()
var range: CFRange = CFRangeMake(0, inputText.length)
let locale: CFLocale = CFLocaleCopyCurrent()
/* トークナイザーを作成 */
let tokenizer: CFStringTokenizer = CFStringTokenizerCreate(kCFAllocatorDefault, inputText as CFString, range, kCFStringTokenizerUnitWordBoundary, locale)
/* 最初の位置に */
var tokenType: CFStringTokenizerTokenType = CFStringTokenizerGoToTokenAtIndex(tokenizer, 0)
/* 形態素解析 */
while tokenType.rawValue != 0 {
dump(tokenType)
range = CFStringTokenizerGetCurrentTokenRange(tokenizer)
/* ローマ字を得る */
let latin: CFTypeRef = CFStringTokenizerCopyCurrentTokenAttribute(tokenizer, kCFStringTokenizerAttributeLatinTranscription)
let romaji = latin as! NSString
/* カタカナに変換 */
let furigana: NSMutableString = romaji.mutableCopy() as! NSMutableString
CFStringTransform(furigana as CFMutableString, nil, kCFStringTransformLatinKatakana, false)
outputText.append(furigana as String)
tokenType = CFStringTokenizerAdvanceToNextToken(tokenizer)
}
return outputText as String
}
// --------- 使い方 ---------
let katakana = chagedToKatakana(kanjiText: "田中一郎")
//=> "タナカイチロウ"
- 特定の文字列の中から数字を抽出
let mixedString = "123abc456def"
let splitNumbers = (mixedString.components(separatedBy: NSCharacterSet.decimalDigits.inverted))
let number = splitNumbers.joined()
print(number) // "123456"