巷では量子コンピュータだの人工知能だのVRだのが話題になっているというのに。
何ゆえバイト数を考慮しなけらばならないのか。
解せぬ、解せぬぞ。
というわけでSwiftで文字列のバイト切り出し方法です。
ソースコード
/// 汎用クラス class Common { /// /// 先頭からnバイト切り出し /// - parameter text: 切り出し対象文字列 /// - parameter n: 切り出しバイト数 /// - parameter encoding: 文字エンコード:デフォルトShiftJIS /// - NSShiftJISStringEncoding /// - NSUTF8StringEncoding /// - NSJapaneseEUCStringEncoding /// - NSUnicodeStringEncoding /// - NSASCIIStringEncoding /// - returns: 切り出し後の文字列 /// ``` /// var text = "アイウエオか12345" /// text = Common.substringToByte(from: text, n: 15) /// print(text) // アイウエオか123 /// ``` /// static func substringToByte( from text:String, n: Int, encoding: NSStringEncoding = NSShiftJISStringEncoding) -> String { var byte = 0 var result = "" text.characters.forEach { let char = $0.debugDescription. stringByReplacingOccurrencesOfString( "\"", withString: "" ) let charLength = char.lengthOfBytesUsingEncoding(encoding) if n >= byte + charLength { byte = byte + charLength result = result + char } } return result } }
解説
テキストを一文字単位でforEachで処理。
debugDescriptionにはダブルクォーテーションが入ってくるので除外。
lengthOfBytesUsingEncodingで文字コードに対応する文字のバイト数を取得。
今回はNSShiftJISStringEncoding.
nバイトを超えないところまで一文字ずつresultに文字列結合。
いじょ
文字単位の操作をしたい場合は以下
Swift2の文字列処理・切り出し方法をまとめた(substring)